关于C++11的统一初始化语法示例详解

2020-01-06 17:23:08刘景俊
std::initializer_list作为参数的构造函数,则使用{}作为初始化值构造对象的话,C++标准显式规定了调用其默认构造函数,如果想要以空列表的语义调用第二个版本,则可以使用({})的方式进行初始化。

三、C++对象的默认初始化行为

列表初始化还允许使用空列表{}作为初始化器,这时候元素都使用默认值进行初始化,或者调用自定义类型的默认构造函数,所以列表初始化的变量其默认行为都是良好的。

对于我们自定义的数据类型,如有必要也可以,在具体调用的时候不需要具体元素类型为T,只要能转化成T即可,在构造函数中使用迭代器访问列表中的每个元素。

C++规定,如果定义的变量没有指定初始化器,则全局变量、名字空间变量、局部static变量、static成员将会执行相应数据类型的空列表{}初始化;而对于局部变量、自由存储区上的变量(堆对象),除非它们定义于用户自定义类型的默认构造函数中,否则不会执行默认初始化,这种情况是需要格外需要注意的,操作未初始化变量可能会造成不确定的行为。


int* p{ new int{} };
char* q{ new char[2014]{} }

呵呵,如果突然看着一大坨C++代码使用{}进行初始化,可能会一时间觉得奇怪,不过习惯也就好啦!

总结

以上就是这篇文章的全部内容了,本文还有许多不足,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ASPKU的支持。


注:相关教程知识阅读请移步到C++教程频道。