考虑以下类定义:
class C {
public:
int i = 9;
const int j = 2;
};
在编译时不使用标志来启用C ++ 11(使用g ++,例如g++ -o test test.cpp
),编译器会抱怨成员变量初始化。但是,使用-std=c++11
这可以正常工作。
为什么在C ++ 11中更改了此规则? 以这种方式初始化成员变量被认为是不好的做法吗?
答案 0 :(得分:3)
在声明时初始化非静态数据成员并不仅仅是"不良做法&#34 ;;在C ++ 11之前,它根本不可能 。
等效的C ++ 03代码是:
class C
{
public:
C() : i(9), j(2)
{
}
int i;
const int j;
};
以防万一:What is this weird colon-member syntax in the constructor?