Lin*_*gxi 22 c++ initialization language-lawyer c++11
我所说的意思可以通过以下示例来解释:
auto p = std::make_shared<int>();
在int
可变缺省初始化(因此具有垃圾值)或值初始化(从而具有零的值)?我已经在GCC 5.2和clang 3.6上进行了测试,前者进行了值初始化,后者进行了默认初始化.我想知道标准对此有何看法?在我看来,现代C++肯定应该在这种情况下执行值初始化.
For*_*veR 23
是.
N3797 20.8.2.2.6
分配适合T类型对象的内存,并通过placement new表达式在该内存中构造一个对象
::new (pv) T(std::forward<Args>(args)...)
所以,这将是
::new (pv) int();
Run Code Online (Sandbox Code Playgroud)
依此类推N3797 8.5.1
表单中发生的初始化
Run Code Online (Sandbox Code Playgroud)T x(a); T x{a};
以及在新表达式(5.3.4)中称为直接初始化.
初始化器的语义如下.目标类型是要初始化的对象或引用的类型,源类型是初始化表达式的类型.如果初始化程序不是单个(可能带括号的)表达式,则不定义源类型.
- 如果初始化程序为
()
,则对象进行值初始化.对值初始化类型的对象
T
意味着:- 否则,对象被零初始化.
新铿锵和GCC都同意这个标准:Live
小智 6
该标准似乎支持您的意见.
从20.8.2.2.6开始:
通过放置new-expression :: new(pv)T(std :: forward(args)...)在该内存中构造一个对象
由于new int()是初始化的值,与new int相比,我预计会为零.
归档时间: |
|
查看次数: |
871 次 |
最近记录: |