C默认初始化和值初始化:哪个是哪个,什么时候和如何可靠地初始化
我的问题与
this和其他几个类似的问题有些重叠.那些有一些很好的答案,但我已经阅读了,我仍然很困惑,所以请不要把这个问题看成一个重复的.
所以,我有以下代码: class A { public: int _a; } void main() { A inst1; A* inst2 = new A; A* inst3 = new A(); } _a在inst1和inst2中未初始化,并在inst3中初始化为0. P. S.本研究背后的原始任务是正确地对任意模板类型T的成员进行初始化. 解决方法
不是那么难
A x; A * p = new A; 这两个是默认初始化.由于您没有用户定义的构造函数,所以这意味着所有成员都被默认初始化.默认初始化基本类型,如int表示“无初始化”. 下一个: A * p = new A(); 这是值初始化. (我不认为在C 98/03中有一个自动版本,虽然在C 11中你可以说A x {},这个大括号初始化就成为初始化值,而A x = A() ;尽管是直接初始化,尽管是复制初始化,也是A x((A())). 再次,在你的情况下,这只是意味着所有的成员都被值初始化.基本类型的值初始化意味着零初始化,这又意味着变量初始化为零(所有基本类型都有). 对于类类型的对象,default-和value-initialization都调用默认构造函数.然后发生的事情取决于构造函数的初始化器列表,而游戏会以递归方式继承成员变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |