lo *_*cre 5 c++ initialization c++11
在C++ 11下,可以在声明时直接初始化类成员.但是也可以在构造函数的初始化列表中再次初始化它们......为什么?
#include <iostream>
struct MyStr
{
MyStr()
:j(0)
{
std::cout << "j is " << j << std::endl; // prints "j is 0"
}
const int j = 1;
};
int main()
{
const int i = 0;
MyStr mstr;
}
Run Code Online (Sandbox Code Playgroud)
因为做这样的事情是一个错误,可以理解:
MyStr()
:j(0),
j(1)
{
}
Run Code Online (Sandbox Code Playgroud)
第一个例子有什么不同,数据成员在声明时初始化,然后再在构造函数的初始化列表中初始化?
Ker*_* SB 10
实际上只发生一次初始化.只是你被允许以brace-or-equals初始化程序的形式编写一个"默认" ,但是如果你的构造函数初始化程序列表也指定了一个初始化程序,那么它就是唯一使用它的程序.
作为旁注,从C++ 14开始,可以为聚合的非静态数据成员(不能具有构造函数)提供大括号或等于初始化程序.