c++中struct的初始化
不能使用直接初始化,比如struct a()这样,会无法匹配上构造函数,可以使用{ }进行初始化
struct的默认构造函数只有在两种情况下会被调用
默认初始化:在不使用初始化器构造变量时执行的初始化。
值初始化:在以空初始化器构造对象时进行的初始化
vector v1;
vector v2{};
这两种情况。
vector v3()不会初始化v3,个人感觉优点生草,显式调用无法调用默认构造函数
我知道原因了,vector v3()会被认为是一个返回vector对象的函数。因为c++把所有能解析成声明的都解析成声明,所以此处会被解析成一个函数声明。
注意:
引用和const必须被初始化。因此,一个包含这些成员的类不能默认构造,
除非程序员提供了类内成员初始化器或者定义了一个默认构造函数来初始化它们
int glob{9};
struct X{
const int a1{7}; //ok
const int a2; //错误:需要一个用户自定义构造函数
const int & r{9}; //ok
int& r1{glob}; //ok
int& r2; //错误,需要一个用户自定义构造函数
};
X x; //错误:X没有默认构造函数