Значение nullptr или nullptr

Если я говорю о nullptr, правильная терминология nullptr (есть только один, и все упоминания ссылки на одно и то же), или nullptr (есть несколько одинаковых вещей).

То есть, должна функционировать документация

Если ptr является значением nullptr, функция использует внутренний буфер...

или же

Если ptr является nullptr, функция использует внутренний буфер...

(Педантично, это не вопрос, основанный на мнениях, потому что на него можно ответить со ссылкой на то, что именно nullptr)

Ответ 1

Сам стандарт использует три формы взаимозаменяемо, но ни один из них не является "nullptr" или "является nullptr". Если вы используете любой из этих трех, вы в хорошей компании.

нулевой

int_type underflow();

7 Замечания: публичные члены basic_streambuf называют эту виртуальную функцию только в том gptr() если gptr() имеет значение null или gptr() >= egptr()

является нулевым указателем

int sync();

38 Эффекты: [...] После создания сторожевого объекта, если rdbuf() является нулевым указателем, возвращает -1. [...]

nullptr

void lock();

3 Броски: [...] system_error с условием ошибки operation_not_permitted если pm - nullptr. [...]

Ответ 2

nullptr - это ключевое слово, которое обозначает prvalue типа std::nullptr_t. Таким образом, супер-формально указатель может не быть [a | the] nullptr. Он может, однако, "быть нулевым" (или "иметь нулевое значение").

В вашем примере документации я бы просто сказал

Если ptr равно null, функция...

Обратите внимание, что std::nullptr_t (и, следовательно, nullptr) не является даже типом указателя! Это особый тип, который может быть преобразован в любой указатель на объект, указатель на функцию или указатель на элемент. Который я считаю дополнительным оправданием для того, чтобы не говорить о указателях, которые являются nullptr; указатели равны нулю.

Ответ 3

Один из контекстов, где может иметь смысл сказать " nullptr ", состоит в том, что для каждого типа указателя есть значение NULL указателя, и это не обязательно одно и то же значение для всех типов в каждой реализации. (Хотя вам нужно вернуться к некоторым устаревшим компьютерам почти 50 лет назад, чтобы найти исключения.) Кто-то может назвать int* maybe_int_p = nullptr; " nullptr " и char* maybe_string_p = nullptr; " nullptr ", хотя ни одна из них не является точно такой же, как константа типа nullptr_t. Id произносит его так же, как "указатель NULL " в любом случае.

Даже тогда вы все равно скажете " nullptr " в контексте, где было ясно, что вы имели в виду.

Что касается реального использования, Google ngram viewer также не может найти никаких примеров. Как указывалось ранее, ни один из них не является официальным. Таким образом, theres не установленное использование, чтобы следовать, ни один звучит для меня, и люди не будут иметь никаких проблем, понимая, что вы имели в виду. Если вы ссылаетесь на ключевое слово nullptr, это синглтон, поэтому более логично называть его "the". Но используйте то, что вы предпочитаете.