我的意思可以用下面的例子来解释:
auto p = std::make_shared<int>();
Is the int
变量默认初始化(因此具有垃圾值)或值初始化(因此具有零值)?我已经在 GCC 5.2 和 clang 3.6 上进行了测试,前者进行值初始化,后者进行默认初始化。我想知道标准对此有何规定?在我看来,现代 C++ 在这种情况下绝对应该执行值初始化。
Yes.
N3797 20.8.2.2.6
为 T 类型的对象分配合适的内存并构造一个
通过放置 new 表达式在该内存中对象::new (pv) T(std::forward<Args>(args)...)
所以,这里将
::new (pv) int();
依此类推 N3797 8.5.1
表单中发生的初始化
T x(a);
T x{a};
以及在 new 表达式 (5.3.4) 中称为直接初始化。
初始化器的语义如下。目标类型是
正在初始化的对象或引用的类型和源
type 是初始化表达式的类型。如果初始化器是
不是单个(可能带括号)表达式,源类型是
没有定义的。
— 如果初始化器是()
,该对象已被值初始化。
对类型的对象进行值初始化T
means:
— 否则,该对象将被零初始化。
new clang 和 GCC 都同意该标准:Live http://melpon.org/wandbox/permlink/Q7vctUOjyZPCV8S4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)