一个空点或空点器

A nullptr or the nullptr

本文关键字:一个      更新时间:2023-10-16

如果我说的是nullptr,正确的术语是nullptr(只有一个,所有提及都是对同一事物的引用),还是nullptr(有几个相同的东西)。

也就是说,函数文档应该说

如果ptrnullptr,则该函数使用内部缓冲区...

如果ptr是一个nullptr,该函数使用内部缓冲区...

(从学究的角度来看,这不是一个基于意见的问题,因为它可以通过参考nullptr到底是什么来回答)

标准本身交替使用三种形式,但没有一种是"is a nullptr"或"is the nullptr"。如果你使用这三者中的任何一个,你就是一个很好的公司。

为空

int_type underflow();

7备注:basic_streambuf的公众成员只有在gptr()null 或gptr() >= egptr()时调用此虚函数

是一个空指针

int sync();

38效果:[...]构造哨兵对象后,如果rdbuf()是空指针,则返回-1。[...]

nullptr

void lock();

3投掷:[...]system_error,如果pmnullptr,则错误条件为operation_not_permitted。[...]

nullptr

是一个关键字,用于指定类型为std::nullptr_t的 prvalue。因此,在超形式上,指针不能是 [a|the]nullptr。但是,它可以"为空"(或"具有空值")。

在您的文档示例中,我只想说

如果ptr为空,则函数 ...

请注意,std::nullptr_t(因此nullptr)甚至不是指针类型!它是一种特殊类型,可以转换为指向对象的任何指针、指向函数的指针或指向成员的指针。我认为这是不谈论指针nullptr的额外理由;指针只是空。

说"anullptr"可能有意义的一种上下文是,每个指针类型都有一个NULL指针值,并且对于每个实现中的所有类型,这些值不一定相同。 (尽管您必须回到近五十年前的一些过时的计算机才能找到例外。 有人可能会称int* maybe_int_p = nullptr;为"nullptr",char* maybe_string_p = nullptr;为"nullptr",尽管它们都不完全相同nullptr_t型常数。 无论如何,我会将其发音与"NULL指针"相同。

即便如此,你仍然会在明确你的意思的上下文中说"nullptr"。

至于实际使用情况,Google ngram 查看器找不到任何示例。 正如先前的回答所指出的那样,这两个术语都不是官方术语。 所以没有既定的用法可以遵循,也没有一个听起来对我不利,人们不会有任何困难理解你的意思。 如果您指的是关键字nullptr,这是一个单例,因此称其为"the"感觉更合乎逻辑。但是使用您喜欢的任何一种。