Какие заголовки C ++ 0x должны определять nullptr? - PullRequest
8 голосов
/ 05 апреля 2011

Теперь, когда C ++ 0x почти здесь, я экспериментировал с ним, и в частности использовал nullptr.Я не смог выяснить, какие стандартные заголовочные файлы нужно включать, если нужно его использовать.

Любая помощь приветствуется.

1 Ответ

20 голосов
/ 05 апреля 2011

Заголовки не требуются.Это встроенное ключевое слово (§ [lex.nullptr]).

2.14.7 Литералы указателя [lex.nullptr]

pointer-literal:
nullptr

Литералом указателя является ключевое слово nullptr.Это значение типа std::nullptr_t.[ Примечание: std::nullptr_t - это отдельный тип, который не является ни типом указателя, ни указателем на тип члена;скорее, значение этого типа является константой нулевого указателя и может быть преобразовано в значение нулевого указателя или значение указателя нулевого элемента.Смотри 4.10 и 4.11. —endnote ]


Однако его тип std::nullptr_t «определен» в заголовке <cstddef> (§ [support.types] / 9).

nullptr_t определяется следующим образом:

namespace std {
    typedef decltype(nullptr) nullptr_t;
}

Тип, для которого nullptr_t является синонимом, имеет характеристики, описанные в 3.9.1 и 4.10.[ Примечание : Хотя адрес nullptr не может быть получен, можно взять адрес другого объекта nullptr_t, который является lvalue. - конец ]

...