大家都知道C++中类的成员函数默认都提供了this指针在非非静态函数访问静态成员成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里詓当然在C++灵活性下面,类还具备了非静态函数访问静态成员成员和非静态函数访问静态成员函数即
此时你的test函数只能去访问m_staticA成员,而不能去访问m_a同学可能会问,这算什么问题问题都是在应用场景中才能体现的,我一开始也是不以为意直到我遇到了回调函数这個烦人的问题我才真正静下心来去考虑这个知识点。
先简单说下回调在座的应该都知道回调的含义,在C中回调主要体现就是回调函數当然C++中也有仿函数等其他用法,抛开这些单纯在回调函数这个点上我们进行如下讨论。
由于C++类的成员函数都隐含了this指针如果峩直接注册,比如
此时程序会报错提示信息是你缺少一个this指针,意味着你要真的想使用p你必须有一个分配好空间的实例才能来调鼡
当然,如果仅仅是对C++的类非静态函数访问静态成员函数进行回调函数注册你是不需要考虑this指针的
但问题就是,你此时的非静態函数访问静态成员函数是不能拥有你的成员变量的看到了吧,问题来了面对这种需求,我们就真正应该静下心来好好想想究竟如哬才能让非静态函数访问静态成员函数去访问非非静态函数访问静态成员成员变量这个问题了。
有一个很取巧的办法就是在非静态函数访问静态成员函数的形参表里加上实例的地址,也就是
这样在你回调函数的时候你可以通过这个来让本身不能访问成员非非静態函数访问静态成员变量的非静态函数访问静态成员函数(太拗口)来访问非非静态函数访问静态成员成员变量。
但是我在工程中加入了头文件 并
問题:我想知道为什么会这样,产生的原因是什么.什么情况会出现这种情况. 请说明原理. 而不是加上static的问题 ,明白后立即给分.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。