C++的指针成员特性非常有趣且功能强大,但是我想知道它是或仅应该仅限于类的实例化对象,还是可以指向静态成员?用例对静态或非静态使用该特性并不明显,尽管它看起来很有趣。指针到成员是否对静态成员有意义?
-2
A
回答
1
静态指针实际上是“正常”指针,例如,
class MyClass
{
public:
static int x;
static int f(int a)
{
return a+1;
}
};
// ...
int* pint = &MyClass::x; // pointer to static property
int (*pfunc)(int) = &MyClass::f; // pointer to static method
指向非静态成员的指针是“特殊的”,因为它们需要一个类实例来取消引用值。它们可以是,认为是“在类实例内成员的偏移量”(这很粗糙,但不能应用于方法指针!)。
相比之下,静态成员实际上非常像命名空间的全局变量,可能具有受限制的可见性。它们具有静态内存地址,这些地址与类实例无关 - 所有实例共享一个静态成员。
1
以下是合法的C++ 11代码。
struct X
{
static void f() {}
static int i;
X() = delete;
};
typedef void(*funcPtr)();
int main()
{
funcPtr g = &X::f;
int * j = &X::i;
}
接受静态成员数据和函数的地址没有任何错误。正如你所看到的,这个类永远不会被实例化。
相关问题
- 1. 指针到成员和静态变量
- 2. 设置静态成员指针变量
- 3. 静态成员是否输入对象?
- 4. 访问静态成员静态成员
- 5. 静态成员函数指针保存非静态成员函数
- 6. 指向静态类成员
- 7. 将此指针推回到私有静态成员向量
- 8. 静态成员
- 9. 如何从静态成员函数调用指向成员函数的指针?
- 10. 静态成员对象
- 11. 静态结构 - 定义,对象,成员
- 12. C++ CUDA指针到成员
- 13. 存储成员指针vs成员值
- 14. 静态成员是否被继承?
- 15. 静态成员是否可以超载?
- 16. 成员指向成员对象和声明顺序的指针
- 17. C#:静态成员VS实例成员
- 18. 静态成员数组成员函数
- 19. Form实例成员和静态成员
- 20. 传递函数指针到非静态成员函数
- 21. 静态类成员
- 22. F#静态成员
- 23. C++静态成员
- 24. 静态javascript成员
- 25. 指向成员的指针
- 26. 对静态成员有一个未定义的引用是什么意思?
- 27. 函数指针指向静态类成员?
- 28. 指向非静态成员函数的指针的值
- 29. 将指针转换为成员函数指向静态函数
- 30. 结构中指向静态成员的指针
由于静态成员不是依赖于对象的,它们就像常规变量一样。 –
您无法从静态成员创建指向成员的指针。 – Simple