C++ 的指向成员的特性很有趣且功能强大,但我想知道它是否或应该仅限于类的实例化对象,或者是否可以指向静态成员?对于该功能的静态或非静态使用,用例对我来说并不明显,尽管它看起来确实很有趣。
问问题
100 次
2 回答
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
指向非静态成员的指针是“特殊的”,因为它们需要一个类实例来取消引用一个值。它们可以被认为是“类实例中成员的偏移量”(不过,这非常粗略,不能应用于方法指针!)。
相比之下,静态成员实际上很像命名空间的全局变量,可能具有受限的可见性。它们具有独立于类实例的静态内存地址——所有实例共享一个静态成员。
于 2013-10-07T11:35:32.237 回答
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;
}
获取静态成员数据和函数的地址并没有错。如您所见,该类在任何时候都不会被实例化。
于 2013-10-07T11:36:45.637 回答