在嵌套类中初始化静态常量成员变量

时间:2012-08-01 21:38:44

标签: c++

给出C ++语言中的代码

/* file xxx.hpp */

class A
{
};

class B
{
private:
    class C
    {
        static const A a;
    };
};

如何在嵌套类C?

中初始化静态常量成员变量A a

5 个答案:

答案 0 :(得分:5)

将以下内容添加到一个.cpp

const A B::C::a;

请注意,发布的代码只是声明:这是实际的定义和初始化。

答案 1 :(得分:4)

在包含要编译的代码的cpp文件中,您应该添加const A B::C::a = {};。 初始化程序(对于POD类或聚合类型的{...}中的初始化程序列表或内置类型的单个常量值)是可选的 - 如果未指定,则将为{{1}调用默认构造函数}。如果是基本类型,则应将其设置为0.

<强>更新

正如David在下面提到的那样,当没有为静态成员定义指定初始化程序时,某些编译器会发出警告。如果a中有一些数据成员且在定义class A期间没有指定初始值设定项,那么我的g ++ 4.6.3编译器会发出以下警告(默认情况下会被视为错误):

  

test.cpp:26:9:错误:未初始化的const'B :: C :: a'[-fpermissive]

     

test.cpp:6:7:注意:'const class A'没有用户提供的默认值

     

构造函数test.cpp:11:8:注意:隐式定义的构造函数不初始化'int A :: test'

答案 2 :(得分:3)

与常规static成员一样。

在您的实施文件中:

const A B::C::a;

答案 3 :(得分:3)

静态成员变量的初始化始终在变量的定义中执行,该变量必须位于程序中的单个翻译单元中:

const A B::C::a = {};

答案 4 :(得分:3)

在源文件(xxx.cpp)中,定义变量:

const A B::C::a;