我应该在c ++中定义静态const整数成员变量,在定义它的类的头文件中还是在cpp文件中定义?
它符合这两种情况,如果我让头文件中的定义和如果我在cpp文件中移动定义,但哪个是c ++标准?
答案 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;