在C++11中初始化类成员变量

Initialize class member variables in C++ 11

本文关键字:成员 变量 初始化 C++11      更新时间:2023-10-16

考虑以下类定义:

class C {
public:
    int i = 9;
    const int j = 2;
};

在编译时(使用g++,例如g++ -o test test.cpp),如果不使用该标志来启用C++11,编译器会抱怨成员变量初始化。但是,使用-std=c++11可以正常工作。

为什么这个规则在C++11中被更改了?以这种方式初始化成员变量是否被认为是不好的做法?

在非静态数据成员声明时初始化它们不仅仅是"坏做法";在C++11之前根本不可能

等效的C++03代码是:

class C
{
public:
    C() : i(9), j(2)
    {
    }
    int i;
    const int j;
};

以防万一:构造函数中这种奇怪的冒号成员语法是什么?