不能使用直接初始化,比如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没有默认构造函数
原文链接: https://www.cnblogs.com/yanzhao-x/p/16516787.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/190537
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!