Почему я могу использовать nullptr без включения STL?

С++ nullptr имеет тип std:: nullptr_t.

Почему такая программа, как

int main() {
 int* ptr = nullptr;
}

все еще работает, хотя он не содержит библиотеки STL?

Ответ 1

В С++ 11 они хотели добавить ключевое слово, чтобы заменить макрос NULL (который в основном определяется как #define NULL 0), так как он является основной концепцией и из-за некоторых раздражающих ошибок, которые вы получаете, когда вы вынуждены использовать 0 как константу нулевого указателя.

Несколько ключевых слов, где предлагается. Большие кодовые базы, в которых выполняется поиск, чтобы гарантировать, что ключевое слово не используется, и что оно все еще описано, что они хотят (константа нулевого указателя).

nullptr оказалось достаточно редким и достаточно запоминающимся.

Типу nullptr по умолчанию не присвоено имя ключевого слова, потому что это не было обязательным для большинства программ. Вы можете получить его через decltype(nullptr) или включить заголовок std и используя std::nullptr_t.