Теперь у нас есть C ++ 11 со многими новыми функциями. Интересным и запутанным (по крайней мере для меня) является новое nullptr
.
Ну, не надо больше для мерзкого макроса NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Тем не менее, я не понимаю, как nullptr
работает. Например, статья в Википедии гласит:
C ++ 11 исправляет это, вводя новое ключевое слово, служащее отличительной константой нулевого указателя: nullptr. Он имеет тип nullptr_t , который неявно конвертируем и сопоставим с любым типом указателя или указателем на член. Он не является неявно конвертируемым или сопоставимым с целочисленными типами, за исключением bool.
Как это ключевое слово и экземпляр типа?
Кроме того, у вас есть еще один пример (помимо Википедии), где nullptr
он превосходит старый добрый 0
?
nullptr_t
гарантировано иметь только один элемент, nullptr
? Итак, если функция вернулась nullptr_t
, то компилятор уже знает, какое значение будет возвращено, независимо от тела функции?
std::nullptr_t
Можно создать экземпляр @AaronMcDaid , но все экземпляры будут идентичны, nullptr
поскольку тип определяется как typedef decltype(nullptr) nullptr_t
. Я считаю, что основная причина существования типа заключается в том, что функции могут быть перегружены специально для перехвата nullptr
, если это необходимо. Смотрите здесь для примера.
nullptr
также используется для представления нулевой ссылки для управляемых дескрипторов в C ++ / CLI.