【发布时间】:2013-06-27 19:09:31
【问题描述】:
我刚刚看到一个问题,在类定义中初始化了类的非静态成员。但是如果我尝试编译以下代码,我会从编译器中得到一个错误。
class MyClass
{
int n = 2;
};
我得到的错误是:
g++ -o ns nonstatic.cpp -Wall -Wextra -pedantic
nonstatic.cpp:3:13: error: ISO C++ forbids initialization of member ‘n’ [-fpermissive]
nonstatic.cpp:3:13: error: making ‘n’ static [-fpermissive]
nonstatic.cpp:3:13: error: ISO C++ forbids in-class initialization of non-const static member ‘n’
我一直认为我必须像这样在构造函数中初始化这样的成员:
class MyClass
{
public:
MyClass ( void ) : n(2) {}
private:
int n;
};
或者在构造函数体内初始化n。
所以我的问题是:什么时候允许在类构造函数的上下文之外初始化一个非静态成员?
亲切的问候,
【问题讨论】:
-
顺便说一句,它所做的是初始化构造函数中的成员,否则不会。
标签: c++ initialization