是否允许在类构造函数之外初始化非静态成员?

时间:2013-06-27 19:09:32

标签: c++ initialization

我刚刚看到一个问题,其中类的非静态成员在类定义中被初始化。但是,如果我尝试编译以下代码,我会从编译器中收到错误。

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。 所以我的问题是:什么时候允许在类构造函数的上下文之外初始化一个非静态成员?

亲切的问候,

1 个答案:

答案 0 :(得分:8)

  

何时允许在C ++中初始化类的非静态成员?

在C ++ 11中已经可以做到这一点。

只需将-std=c++11传递给命令行即可。