C++11开始,变量的初始化除了=
还能用初始化列表{}
,其中在 Effective Modern C++ 中,作者还强调初始化列表可以解决以前的一个很恼火的问题,就是如果调用默认构造函数,不能在后面加空的圆括号,因为这会被解释成函数的声明,但是可以用花括号:
Widget w1; //默认构造函数
Widget w2();//声明一个返回值为Widget类型、不接受参数的函数w2
Widget w3{
};//默认构造函数
看到这里我就产生了疑惑:不加括号不就完了吗,同样也是调用默认构造函数呀?
话是这么说,但我还是照着做,加了个{}
,心想总归什么地方有用吧。
今天做了个测试,发现加了{}
果然还是有不一样的,主要体现在构造函数中未被初始化的那些元素上。
struct test {
int a;
int b{
5};
};
auto t1 =