繁体   English   中英

如何定义静态const成员?

[英]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'在标记的行上。

  • 还有另一种方法来定义这个静态const成员变量吗?
  • 这是gcc-4.4的限制吗?
  • 有解决方法吗?

说:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM