4

NULL == nullptr в C++11?

PaulD
  • 1,918
  • 2
    не совcем. NULL большинством компиляторов с легкостью трактуется как 0 (на самом деле это обычно define). Но нет 100 гарантии, что это так. А вот nullptr - это известная для компилятора константа и компилятор знает, что это такое. – KoVadim Dec 06 '13 at 13:29
  • @KoVadim, можно сказать, что надежнее будет инициализировать указатели nullptr, для дальнейшей проверки на корректность, нежели NULL? – PaulD Dec 06 '13 at 13:58
  • nullptr как раз специально ввели, что бы решить часть неоднозначных ситуаций с NULL.

    Это все лучше утрясется в голове, если понимать, то компилятор не видет NULL, он видит обычно вместо него 0 (препроцессор постарался). А вот nullptr виден. И компилятор может сделать анализ.

    – KoVadim Dec 06 '13 at 14:43
  • @SoloMio, не совсем. Везде где идет речь про указатели НУЖНО использовать null_ptr. Это гарантия того, что компилятор попробует застраховать программиста от ошибки. – gecube Dec 06 '13 at 14:45

2 Answers2

6

Вот вам пример, когда nullptr лучше, чем NULL:

void f(int) { cout << "f(int)" << endl; }
void f(char*) { cout << "f(char*)" << endl; }

char* s = NULL; f(s); // f(char) f(NULL); // f(int) f(nullptr); // f(char)

http://ideone.com/P7JAIg

VladD
  • 206,799
4

Вообще говоря, выражение NULL == nullptr всегда истино, это гарантирует стандарт:

Two operands of type std::nullptr_t or one operand of type std::nullptr_t and the other a null pointer constant compare equal.

Но, как вам уже написали, NULL это не то же самое, что nullptr.

dzhioev
  • 11,683
  • 25
  • 38