【发布时间】:2011-12-09 10:32:45
【问题描述】:
我编写了以下示例代码:
class MyClass {
static int a;
public:
MyClass ( int i ) : a ( i ) {
cout << " \n ctor called. a is : "<< a << " \n";
}
};
int MyClass::a = 1;
int main( ) {
MyClass my(2);
}
我知道这会产生编译错误,因为静态数据成员不能在构造函数初始化列表中使用。
那么如何在每次创建类的对象时初始化静态数据成员呢?我希望从构造函数调用的静态成员函数可以做到这一点。这是唯一可行的方法吗?
【问题讨论】:
-
这毫无意义。如果你需要“类的每个对象”的东西,那么它就不是静态的。
-
您确实意识到您的静态 int 在 MyClass 的所有实例中具有相同的值?
-
@Kerresk:我知道静态数据成员只会存在一份副本。但是我需要在每次创建对象时为其分配一个值,以便先前创建的对象也共享相同的值。这有意义吗?
-
现在你说“分配”,而在你的问题中你说“初始化”。这令人困惑。在处理复杂的技术问题时,注意细节很重要。
标签: c++ initialization initializer-list static-data