2

Я хочу спросить, что означает (0) после указателя i.e 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 вопрос для понимания объяснение позади него (они на самом деле то же самое, 0 и null в данном контексте)

+0

' 0' и 'NULL' - это не то же самое. –

+1

Учтите, что этот пост имеет 7 лет. Вы также можете использовать nullptr –

+0

Ну, конечно, это не так, но в этом контексте @LightnessRacesInOrbit они представляют то же самое ... – Vucko

1

Для любого интегрального типа T, следующие два объявления эффективно эквивалентны:

T obj(0); 
T obj = 0; 

И так как 0 является константой нулевого указателя, все, что вы здесь делаете, инициализирует ваши два указателя равными нулю.

Есть много способов инициализируются объекты, но подумайте, как объявлять объекты типа класса:

MyClass obj(someArguments...); 

Это то же самое.

1

Это direct initialization.

если Т представляет собой тип внеклассового, используются стандартные преобразования, если это необходимо, чтобы преобразовать значение других к CV-неквалифицированной версии T.

Для типа указателя, инициализировать его с 0 делает его нулевым указателем. См. Pointer conversions.

Константа нулевого указателя (см. NULL), может быть преобразована в любой тип указателя, а результатом является значение нулевого указателя этого типа.

0

Это вызов конструктора. Поскольку конструктор не определен, компилятор поставляет его. После C++ 11 предпочтительной формой является «Node» ptr1 {0}; используя фигурные скобки.

+0

Нет конструктора для указателей, компилятора или другого. –

+0

Спасибо, 'Узел * ptr1 {nullptr};' также будет лучше. – Gregg

1

Это просто инициализирует указатель. И он инициализирует его как null.