我看过相关答案here and here对此,但我想要确认,因为他们都没有明确说明这一点。
假设我有一堂课Foo
和一名会员bar
类型的int*
.
以下两个初始化完全等效吗?
Foo::Foo() : bar(NULL) // null pointer constant by macro
{
}
Foo::Foo() : bar() // value initialization
{
}
值初始化指针的初始化为空指针值;因此两个初始化列表是等效的。
指针没有类或数组类型,因此它们的值初始化是零初始化。 (8.5p8)
然后,(8.5p6)
To 零初始化类型的对象或引用T
means:
- if
T
是标量类型(3.9),对象被初始化为通过转换整数字面量获得的值0
(零)到T
这个整数字面量0
is a 空指针常量(4.10p1),当转换为指针类型时,会创建一个空指针值.
请注意,具有静态和线程持续时间的变量的零初始化 (3.6.2) 也会将指针初始化为空指针值。
上面的段落引用来自 C++1y 草案 n3936,但它们在我也检查过的早期草案中是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)