[英]How to define static const member?
我的Test
类有一个子类型的const
static
成员。 我通常如下定义这个const
static
成员。
class Test
{
public:
class Dummy {};
private:
static Dummy const dummy;
};
Test::Dummy const Test::dummy; // ERROR HERE
int main()
{
return 0;
}
使用gcc-4.6编译此源时,它不会出错并正确编译。
当使用gcc-4.4编译同一个源时,它会出现以下错误: error: uninitialized const 'Test::dummy'
标记的error: uninitialized const 'Test::dummy'
在标记的行上。
说:
Test::Dummy const Test::dummy = { };
请参阅http://gcc.gnu.org/wiki/VerboseDiagnostics#uninitialized_const (其中提供了相关的标准参考)以及GCC 4.6发行说明
在4.6.0和4.6.1中,G ++不再允许对const限定类型的对象进行默认初始化,除非该类型具有用户声明的默认构造函数。 在4.6.2中,G ++实现了DR 253的建议解析,因此如果初始化所有子对象,则允许默认初始化。 可以通过提供初始化程序来修复无法编译的代码
struct A { A(); };
struct B : A { int i; };
const B b = B();
使用-fpermissive可以允许旧的,不符合要求的行为。
你也可以在class Dummy
添加一个默认的ctor:
class Dummy { public: Dummy(){} };
在第4行。
编辑:似乎gcc 4.4无法生成类Dummy
的默认ctor。 因此,上面直接克服了这个编译器错误。
使用gcc 4.4,使用
Test::Dummy const Test::dummy = Test::Dummy;
使用支持C ++ 11的编译器,您可以使用统一的初始化语法:
Test::Dummy const Test::dummy = { };
但我不认为这是由gcc 4.4支持的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.