是否可以在类定义中初始化静态常量成员?请参阅下面的代码,
class foo
{
public:
foo(int p) : m_p(p){}
~foo(){}
private:
int m_p;
};
class bar
{
public:
bar(){}
~bar(){}
public:
static const foo m_foo = foo( 2 ); //is this possible?
};
非常感谢。
答案 0 :(得分:4)
简短回答:
不,直到静态成员是const并且是整数或枚举类型。
答案很长:
$ 9.4.2 / 4 - “如果是静态数据成员 const整数或常量枚举 类型,它在类中的声明 定义可以指定一个 恒定初始化器应该是一个 积分常数表达式(5.19)。 在这种情况下,该成员可以出现在 积分常数表达式。该 会员仍应在a。中定义 命名空间作用域,如果它在 程序和命名空间范围 定义不得包含 初始值设定“。
答案 1 :(得分:3)
不适用于类类型的静态数据成员,如示例所示。
9.4.2 / 2:
静态数据的声明 其类定义中的成员不是 定义...的定义 静态数据成员应出现在 包含成员的命名空间范围 课程定义。
9.4.2 / 4:
如果静态数据成员是const 整数或常数枚举类型, 它在课堂上的宣言 定义可以指定一个 恒定初始化器应该是一个 积分常数表达式(5.19)。 在这种情况下,该成员可以出现在 积分常数表达式。该 会员仍应在a。中定义 名称 - 空间范围,如果它在...中使用 程序和命名空间范围 定义不得包含 初始化程序。