class TConst
{
const int i;
int& ref;
public:
TConst(int n):i(n),ref(n){}
static void p1(){prn(i);}//error here
};
当我尝试在const
成员函数中使用static
类成员时,我的编译器会生成错误。
为什么不允许?
答案 0 :(得分:13)
const
意味着不同的事情。在这种情况下,这意味着i
在初始化后是不可变的。它不意味着它是一个文字常量(就像我相信你认为它意味着)。 i
对于TConst
的不同实例可能有所不同,因此static
方法无法使用它是合乎逻辑的。
答案 1 :(得分:7)
即使它不是const
:
error: a nonstatic member reference must be relative to a specific object
静态函数无法访问非静态成员变量。这是因为非静态成员变量必须属于类对象,而静态成员函数没有可以使用的类对象。
答案 2 :(得分:6)
在对象构造期间初始化const
成员。 static
成员不依赖于对象创建,也无法访问this
指针,因此他们不知道const
成员变量所在的位置。