【问题标题】:Is it possible to initialize static const member object in a class in C++?是否可以在 C++ 的类中初始化静态 const 成员对象?
【发布时间】:2010-11-03 03:21:19
【问题描述】:
是否可以在类定义中初始化静态常量成员?代码见下方,
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?
};
非常感谢。
【问题讨论】:
标签:
c++
static
constants
definition
class-members
【解决方案1】:
简答:
不,直到静态成员是 const 并且是整数或枚举类型。
长答案:
$9.4.2/4 - “如果一个静态数据成员是
const 积分或 const 枚举
类型,它在类中的声明
定义可以指定一个
常量初始化器,它应该是一个
积分常数表达式 (5.19)。
在这种情况下,该成员可以出现在
整数常量表达式。这
成员仍应定义在
命名空间范围(如果在
程序和命名空间范围
定义不应包含
初始化器。”
【解决方案2】:
不适用于类类型的静态数据成员,如您的示例。
9.4.2/2:
静态数据的声明
其类定义中的成员不是
定义... 的定义
静态数据成员应出现在
包含成员的命名空间范围
类定义。
9.4.2/4:
如果静态数据成员是 const
整数或 const 枚举类型,
它在类中的声明
定义可以指定一个
常量初始化器,它应该是一个
积分常数表达式 (5.19)。
在这种情况下,该成员可以出现在
整数常量表达式。这
成员仍应定义在
命名空间范围,如果它用于
程序和命名空间范围
定义不应包含
初始化器。