Теперь у нас есть 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.