C++ 指针的值初始化在C++;?
我已经看到了相关的答案,但我想确认一下,因为没有一个明确的答案 假设我有一个类C++ 指针的值初始化在C++;?,c++,C++,我已经看到了相关的答案,但我想确认一下,因为没有一个明确的答案 假设我有一个类Foo和一个类型为int*的成员bar 以下两种初始化是否完全等效? Foo::Foo() : bar(NULL) // null pointer constant by macro { } Foo::Foo() : bar() // value initialization { } 指针的值初始化将其初始化为空指针值;因此,两个初始值设定项列表是等效的 指针没有类或数组类型,所以它们的值初始化为零初始化。(8.
Foo
和一个类型为int*
的成员bar
以下两种初始化是否完全等效?
Foo::Foo() : bar(NULL) // null pointer constant by macro
{
}
Foo::Foo() : bar() // value initialization
{
}
指针的值初始化将其初始化为空指针值;因此,两个初始值设定项列表是等效的
指针没有类或数组类型,所以它们的值初始化为零初始化。(8.5p8) 然后,(8.5p6) 将
T
类型的对象或引用初始化为零意味着:
- 如果
是标量类型(3.9),则将对象初始化为通过将整数文本T
(零)转换为0
T
0
是一个空指针常量(4.10p1),当转换为指针类型时,将创建一个空指针值
请注意,静态和线程持续时间变量的零初始化(3.6.2)也会初始化指向空指针值的指针
以上段落引用来自C++ 1Y草案N39 36,但在较早的草稿中我也检查过了。
这在旧C++版本中是否不等价?@ MelLun2011:行为没有改变,但是段落号有。在C++03中,相应的规则组合在8.5p5中。