在C++中,指针的值初始化到底是做什么的?

mer*_*011 6 c++

我已经在这里这里看到了相关的答案,但我想要确认,因为它们都没有明确说明.

假设我有一个类Foo和一个bar类型的成员int*.

以下两个初始化完全相同吗?

Foo::Foo() : bar(NULL) // null pointer constant by macro
{
}

Foo::Foo() : bar() // value initialization
{
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 10

指针的值初始化将其初始化为空指针值; 因此两个初始化列表都是等效的.


指针没有类或数组类型,因此它们的值初始化为零初始化.(8.5p8)

然后,(8.5p6)

零初始化的类型的对象或参考T指:

  • 如果T是标量类型(3.9),则将对象初始化为通过将整数文字0(零)转换为T

此整数文字0是一个空指针常量(4.10p1),当转换为指针类型时,会创建一个空指针值.


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


以上段落引用来自C++ 1y草案n3936,但它们在我检查的早期草稿中也是相同的.