Зараз у нас є 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
можна створити миттєво , але всі екземпляри будуть ідентичними nullptr
тому, що тип визначений як typedef decltype(nullptr) nullptr_t
. Я вважаю, що основною причиною такого типу є те, що функції можна перевантажувати спеціально для вилову nullptr
, якщо потрібно. Дивіться тут приклад.
nullptr
також використовується для представлення нульової посилання на керовані ручки в C ++ / CLI.