用于定义公共变量静态const整数的C ++标准

时间:2014-02-17 12:13:07

标签: c++ static integer const

我应该在c ++中定义静态const整数成员变量,在定义它的类的头文件中还是在cpp文件中定义?

它符合这两种情况,如果我让头文件中的定义和如果我在cpp文件中移动定义,但哪个是c ++标准?

2 个答案:

答案 0 :(得分:1)

以下是C ++标准关于常量静态成员的完整引用:

  

如果非易失性const静态数据成员是完整的或   枚举类型,它在类定义中的声明可以指定   一个括号或等于初始化器,其中每个初始化器子句都是   assignmentexpression是一个常量表达式(5.19)。静态数据   文本类型的成员可以在类定义中声明   constexpr说明符;如果是的话,其声明应指明一个   brace-or-equal-initializer,其中每个初始化子句都是   赋值表达式是一个常量表达式。 [注意:两者都有   在这些情况下,成员可能出现在常量表达式中。 - 注意   ] 如果成员仍然在命名空间范围内定义   程序中的odr-used(3.2)和命名空间范围定义应该   不包含初始化程序

因此,如果const静态成员未使用ODR,则不需要在类外部定义它。

注意:顺便说一句,在这种情况下,const静态成员是否公开是不重要的。

答案 1 :(得分:0)

您必须在类定义之外定义静态成员,并在那里提供initailizer。

对于标准方法,首先要做这样的事情

在头文件中声明静态变量

class Something
{
public:
    static const int s_nValue;
};

在cpp文件的顶部初始化它像

const int Something::s_nValue = 1;