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

這只是初始化指針。它將它初始化爲空。