c – 为什么我们不能有非const类级静态变量?
发布时间:2020-12-16 10:52:53 所属栏目:百科 来源:网络整理
导读:为什么 the Visual C++ compiler refuse to compile this code? 我显然知道错误是: Error C2864: SingletonT::p : Only static const integral data members can be initialized within a class 但为什么? (即技术原因是否有不允许的原因?) 这是特定于编
为什么
the Visual C++ compiler refuse to compile this code?
我显然知道错误是:
但为什么? (即技术原因是否有不允许的原因?) 它似乎也像not all compilers mind this. 另外,解决这个问题的正确方法是什么? template<typename T> struct Singleton { static T *p = 0; // Error C2864 static T *getInstance() { /*...*/ return p; } }; 解决方法
这是标准行为.只有静态const积分成员才能在没有正确定义的情况下进行初始化.需要在某处定义所有其他类型,并在定义时编写初始化:
template<typename T> struct Singleton { static T *p; static T *getInstance() { /*...*/ return p; } }; template<typename T> T *Singleton<T>::p = 0; 必须在某处定义对象.如果在类中定义它们,则在头文件中定义它们,并为包含它的每个编译单元获取不同的对象.这对于const整数类型是放宽的,如果你没有定义它们,那么编译器只是用它的文字值替换它.如果没有提供定义,那么取这样的静态const积分的地址仍会导致链接器错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |