【问题标题】:Const member init常量成员初始化
【发布时间】:2020-05-10 09:18:30
【问题描述】:

在我的书“C++ 编程语言”Bjarne Stroustrup 中,我读到了 const 成员 init 并看到了下一个代码(我更改了 var 名称和值):

class ConstMembers
{
public:
    static const int a = 1; // ok
    static int b = 2; // error: non const
    const int c = 3; // error: no static
    static const float d = 2.3; // error: not integer
};

但是当我在 Clion 2020.1 中使用下一个 cmake 设置运行此代码时

set(CMAKE_CXX_STANDARD 11)  

第三种情况

const int c = 3; // error: no static 

我没有收到错误消息。

是书上的错误还是c++11允许这样的初始化?

【问题讨论】:

  • 你在读什么版本?我相信它是为 C++11 更新的第 4 版。
  • 我读了翻译的书(俄文)。 2011 年写成“特别版”。

标签: c++ c++11


【解决方案1】:

是的,default initializer list 从 C++11 开始就受支持。

(强调我的)

通过一个默认的成员初始化器,即大括号或等号 初始化器包含在成员声明中,如果 构造函数的成员初始化器列表中省略了成员。

如果一个成员有一个默认的成员初始化器并且也出现在 构造函数中的成员初始化列表,默认成员 该构造函数的初始值设定项被忽略。

你也可以将其初始化为

class ConstMembers
{
public:
    ...
    const int c {3};
    ...
};

【讨论】:

    【解决方案2】:

    C++11 允许这样做。你的书一定很旧。见Non-static data members

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多