首页 > 解决方案 > 常量成员初始化

问题描述

在我的“The C++ Programming Language”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
};

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

set(CMAKE_CXX_STANDARD 11)  

在第三种情况下

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

我没有收到错误。

克利昂屏幕

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

标签: c++c++11

解决方案


是的,从 C++11 开始支持默认初始化列表。

(强调我的)

通过默认成员初始值设定项,它是包含在成员声明中的大括号或等号初始值设定项,并且在构造函数的成员初始值设定项列表中省略该成员时使用。

如果成员具有默认成员初始化程序并且还出现在构造函数的成员初始化列表中,则该构造函数的默认成员初始化程序将被忽略。

您也可以将其初始化为

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

推荐阅读