Foo f1 = Foo(); // (1) Ok
Foo f2 = Foo; // (2) Compiler error
Foo *p1 = new Foo(); // (3) Ok
Foo *p2 = new Foo; // (4) Ok. Why??
我想知道为什么有两种初始化指针的方法。看起来有点不一致。是否存在某种逻辑原因?如果有,是什么?或者,也许这是某种遗产?如果是这样,这种符号的起源是什么?
至少可以说,这有点……复杂。
当处理对象时,这两种表示法是等效的。当处理原始类型时(例如int
), (3)
将初始化(零填充)该值,而(4)
不会(该值将保持未定义)。
对于自动分配的对象,这样:
Foo f1;
声明并初始化一个Foo
使用默认构造函数的对象。这:
Foo f2 = Foo();
声明并初始化一个Foo
使用复制构造函数的对象,本质上是复制临时对象的值(Foo()
),它是使用默认构造函数构建的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)