Vio*_*ffe 22 c++ initialization default-value
我的问题与此以及其他几个相似的问题有些重叠.那些有一些很好的答案,但我已经读过了,我仍然感到困惑,所以请不要认为这个问题是重复的.
所以,我有以下代码:
class A {
public: int _a;
}
void main()
{
A inst1;
A* inst2 = new A;
A* inst3 = new A();
}
Run Code Online (Sandbox Code Playgroud)
_a
未初始化in inst1
和in inst2
初始化为0
in inst3
.调用哪个初始化,以及代码为何如此工作?请考虑我的帐户我手头没有C++ 03标准,但我有最后的C++ 11草案(我按'03标准编程),所以'03标准的引用或对'11的引用非常欢迎.
PS这项研究背后的原始任务是正确地初始化任意模板类型的成员T
.
Ker*_* SB 24
不是那么难:
A x;
A * p = new A;
Run Code Online (Sandbox Code Playgroud)
这两个是默认初始化.由于您没有用户定义的构造函数,这只意味着所有成员都是默认初始化的.默认初始化基本类型,如int
"无初始化".
下一个:
A * p = new A();
Run Code Online (Sandbox Code Playgroud)
这是值初始化.(我不认为在C++ 98/03中存在这种自动版本,尽管在C++ 11中你可以说A x{};
,这个大括号初始化变成了值初始化.而且,A x = A();
尽管是复制,它实际上已经足够接近了-initialization,或A x((A()))
尽管是直接初始化.)
同样,在您的情况下,这只意味着所有成员都是值初始化的.基本类型的值初始化意味着零初始化,这反过来意味着变量被初始化为零(所有基本类型都有).
对于类类型的对象,default-和value-initialization都会调用默认构造函数.然后发生什么取决于构造函数的初始化列表,游戏继续递归成员变量.
归档时间: |
|
查看次数: |
5342 次 |
最近记录: |