【发布时间】:2013-03-11 05:52:24
【问题描述】:
我有以下来自 Eckel-Thining in C++ 的代码行
Class Obj{
static int i,j;
public:
void f() const {cout<<i++<<endl;}
void f() const {cout<<i++<<endl;}
};
int Obj::i=47;
int Obj::j=11;
现在它是用 Ecekl 为 const 成员函数编写的,通过声明成员函数 const ,我们告诉编译器不要修改类数据。我知道在某些特定情况下,例如 mutable const 并通过显式丢弃 this 指针的 constness ,我们可以取消它,但这里两者都没有发生,并且 i++ 和 j++ 工作正常。为什么会这样?
【问题讨论】:
-
静态成员不是对象的一部分。
-
但是它们被声明为类私有不是吗?只是它们对所有对象都有一个唯一的存储空间。
-
没错,所以它们不属于任何对象。它们在创建任何对象之前就存在。