【问题标题】:Is initializing non static members allowed outside of a class constructor?是否允许在类构造函数之外初始化非静态成员?
【发布时间】: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


【解决方案1】:

什么时候允许在 C++ 中初始化一个类的非静态成员?

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

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

【讨论】:

  • 如果我这样做,我的编译器会告诉我它尚未实现,但我正在使用 g++ 4.6.3 在 Ubuntu 上进行编译。新版本的 g++ 支持吗?
  • 实验支持从 gcc 4.7 开始。see
  • 我认为,在非 C++11 中,你只能做整数类型。我忘记了确切的规则。最新版本的 GCC 几乎实现了 C++11 的所有语言特性,以及一些库特性。
  • @JaminGrey 它认为我的示例表明在 C++11 之前的版本中不能这样做:)
  • @hetepeperfan 如果它们是 const 整数类型,则可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2021-04-28
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多