2

我想问一下(0)在指针后面是什么意思,即Node* ptr1(0)指针后面括号的含义

struct Node 
{ 
    string info; 
    Node * next 
}; 

int main() 
{ 
    Node* ptr1 (0), *ptr2 (0), 
    ptr1 = new Node; 
    ptr2 = new Node; 
} 
+4

应该注意的是,不应该用'0'或'NULL'来初始化指针,而应该使用'nullptr'来代替C++ 11. – ArchbishopOfBanterbury

回答

3

它意味着用0或初始化指针。

参考this问题对于理解其背后的解释(他们实际上是相同的; 0null在这方面)

+0

'0'和'NULL'是不一样的。 –

+1

另外请注意,该职位已有7年。你也可以使用nullptr –

+0

当然他们不是,但是在这种情况下@LightnessRacesInOrbit它们表示相同...... – Vucko

1

对于任何整数类型T,下面的两个声明实际上等效:

T obj(0); 
T obj = 0; 

而且由于0是一个空指针常量,所以你在这里做的是初始化你的两个指针为null。

有很多方法来初始化对象,但考虑如何声明类的对象:

MyClass obj(someArguments...); 

这是同样的事情。

1

这是direct initialization

如果T是一种非类型,标准转化被使用,如果必要的话,对其它的值转换为T.

的CV-不合格版本对于指针类型,初始化用0表示它为空指针。见Pointer conversions

空指针常量(请参见NULL)可以转换为任何指针类型,并且结果是该类型的空指针值。

0

这是一个构造函数调用。由于没有定义构造函数,因此编译器提供了一个。 在C++ 11之后,首选的形式是'Node * ptr1 {0};'使用括号。

+0

指针没有构造函数,编译器提供的或其他的。 –

+0

谢谢,'Node * ptr1 {nullptr};'会更好。 – Gregg

1

这只是初始化指针。它将它初始化为空。