Подтвердить что ты не робот

Использование NULL в С++?

Возможный дубликат:
Используете ли вы NULL или 0 (ноль) для указателей на С++?

Хорошо ли использовать NULL в С++ или просто значение 0?

Есть ли особое обстоятельство, используя NULL в C-вызове кода из С++? Как SDL?

4b9b3361

Ответ 1

В С++ NULL расширяется до 0 или 0L. Смотрите этот комментарий от Stroustrup:

Должен ли я использовать NULL или 0? В С++, определение NULL равно 0, поэтому существует только эстетическая разница. я предпочитаю чтобы избежать макросов, поэтому я использую 0. Другой проблема с NULL заключается в том, что люди иногда ошибочно полагают, что это отличается от 0 и/или не целое число. В предстандартном коде NULL был/иногда определяется чем-то непригодным и, следовательно, должен/должен быть избегать. Это менее распространено дни.

Если вам нужно называть нулевой указатель, назовите его nullptr; что это вызывается в С++ 0x. Затем, "nullptr" будет ключевым словом.

Ответ 2

Недостатком NULL в С++ является то, что это определение для 0. Это значение, которое может быть безшовно преобразовано в указатель, значение bool, float/double или int.

Это не очень безопасный тип и привело к фактическим ошибкам в приложении, над которым я работал.

Рассмотрим это:

void Foo(int i);
void Foo(Bar* b);
void Foo(bool b);


main()
{
     Foo(0);         
     Foo(NULL); // same as Foo(0)
} 

С++ 11 определяет nullptr, который можно конвертировать в нулевой указатель, но не в другие скаляры. Это поддерживается во всех современных компиляторах С++, включая VС++ по состоянию на 2008 год. В более старых версиях GCC есть аналогичная функция, но затем она называлась __null.

Ответ 3

Из crtdbg.h(и многих других заголовков):

#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

Следовательно, NULL - 0, по крайней мере, на платформе Windows. Так что нет, не то, что я знаю.

Ответ 4

Я никогда не использую NULL в своем коде C или С++. 0 работает просто отлично, как и if (ptrname). Любой компетентный программист на C или С++ должен знать, что они делают.

Ответ 5

Предполагая, что у вас нет библиотеки или системного заголовка, который определяет NULL как, например, (void*)0 или (char*)0, это нормально. Я всегда стараюсь использовать 0 самостоятельно, поскольку по определению это пустой указатель. В С++ 0x у вас будет nullptr, поэтому вопрос не будет иметь никакого значения.