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'で初期化するのではなく、C++ 11の代わりに 'nullptr'を使うべきです。 – ArchbishopOfBanterbury

答えて

3

が0又はヌルでポインタを初期化します。

その背後の説明を理解するためのthis質問(彼らは実際には同じだが、この文脈で0null)を参照してください、以下の2つの宣言が効果的に等価である任意の整数型Tについて

+0

' 0'と 'NULL'は同じではありません。 –

+1

また、その投稿には7年が必要です。あなたはnullptrを使うこともできます –

+0

もちろん、そうではありませんが、この文脈で@LightnessRacesInOrbitは同じものを表します... – Vucko

1

T obj(0); 
T obj = 0; 

0はnullポインタ定数ですので、ここでは2つのポインタをnullに初期化しています。

あり、オブジェクトを初期化する方法はたくさんありますが、あなたはクラス型のオブジェクトを宣言する方法を検討:

MyClass obj(someArguments...); 

それは同じことです。

1

これはdirect initializationです。

Tは、非クラス型である場合、必要に応じて、標準的な変換がポインタ型の場合T.

のCV-未修飾バージョンに他の値を変換するために、使用されているが、それを初期化します0を指定するとNULLポインタになります。 Pointer conversionsを参照してください。

NULLポインタ定数(NULLを参照)は、任意のポインタ型に変換することができ、結果はその型のNULLポインタ値です。

0

これはコンストラクタ呼び出しです。コンパイラにはコンストラクタが定義されていないので、コンパイラはそれを提供します。 C++ 11以降では、優先形式は 'Node * ptr1 {0};'中括弧を使用します。

+0

コンパイラが提供するポインタ用のコンストラクタはありません。 –

+0

ありがとうございます、 'Node * ptr1 {nullptr};'さらに良いでしょう。 – Gregg

1

これは単にポインタを初期化します。それをnullに初期化しています。

関連する問題