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
类型的对象或引用初始化为零意味着:

  • 如果
    T
    是标量类型(3.9),则将对象初始化为通过将整数文本
    0
    (零)转换为
    T
此整数文本
0
是一个空指针常量(4.10p1),当转换为指针类型时,将创建一个空指针值


请注意,静态和线程持续时间变量的零初始化(3.6.2)也会初始化指向空指针值的指针



以上段落引用来自C++ 1Y草案N39 36,但在较早的草稿中我也检查过了。

这在旧C++版本中是否不等价?@ MelLun2011:行为没有改变,但是段落号有。在C++03中,相应的规则组合在8.5p5中。