C++ 空PTR或空PTR

C++ 空PTR或空PTR,c++,null,language-lawyer,C++,Null,Language Lawyer,如果我说的是,正确的术语是nullptr(只有一个,所有提及的都是对同一事物的引用),还是anullptr(有几个相同的事物) 也就是说,函数文档应该说 如果ptr是空ptr,则函数使用内部缓冲区 或 如果ptr是一个nullptr,则该函数使用一个内部缓冲区 (学究般地说,这不是一个基于观点的问题,因为可以通过引用nullptr的确切内容来回答)nullptr是一个指定类型为std::nullptr\u t的PR值的关键字。因此,超级形式上,指针不能是[a | the]nullptr。但是,它

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

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

如果ptr是
空ptr
,则函数使用内部缓冲区

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


(学究般地说,这不是一个基于观点的问题,因为可以通过引用
nullptr
的确切内容来回答)

nullptr
是一个指定类型为
std::nullptr\u t
的PR值的关键字。因此,超级形式上,指针不能是[a | the]
nullptr
。但是,它可以“为null”(或“具有null值”)

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

如果ptr为null,则函数


请注意,
std::nullptr\u t
(因此
nullptr
)甚至不是指针类型!它是一种特殊类型,可以转换为任何指向对象的指针、指向函数的指针或指向成员的指针。我认为这不是额外的理由来说明指针是“代码> NulLPTR < /代码>;指针只是空的。

标准本身可以互换使用三种形式,但没有一种是“is a nullptr”或“is The nullptr”。如果你使用这三种方法中的任何一种,你都是好朋友

是空的 7备注:
basic\u streambuf
的公共成员仅在
gptr()
为null或
gptr()>=egptr()时调用此虚拟函数

是一个空指针 38效果:[……]在构造sentry对象后,如果
rdbuf()
是空指针,则返回
-1
。[……]

is
nullptr
如果
pm
nullptr
,则3次抛出:[……]
system\u error
,错误条件为
operation\u not \u
。[……]


说“a
nullptr
”可能有意义的一个上下文是,每个指针类型都有一个
NULL
指针值,并且对于每个实现中的所有类型,这些值不一定相同。(尽管你必须回到近五十年前的一些过时的计算机上才能找到例外情况。)有人可能会调用
int*maybe_int_p=nullptr“a
nullptr
”和
char*maybe\u string\u p=nullptr
“a
nullptr
,”即使这两个变量都与
nullptr\u t
类型的常数不完全相同。无论如何,我会把它的发音和“a
NULL
pointer”一样

即使在那时,你仍然会说“the
nullptr
”,因为你的意思很清楚


至于实际使用情况,Google ngram viewer也找不到这两者的任何例子。正如先前的回答所指出的,这两个术语都不是官方术语。所以没有固定的用法可以遵循,我也听不懂,人们理解你的意思也不会有任何困难。如果你指的是关键词
nullptr
,这是一个单例,所以称之为“the”更合乎逻辑。但是,使用你喜欢的任何一个词。

似乎基本上不使用任何文章,这与说“x是5”或“x是真的”是一致的。然而,在阅读更多内容后,我发现出现了一些“nullptr”。我喜欢在这里使用
语言律师
标记。我试图看到问题的价值,但没有成功。这似乎更像是一个编辑问题,因为它不会改变语言的语义。我甚至会说这不是主题。@Raedwald,我不明白。那么它与链接的“nullptr到底是什么?”有何不同?您是否说过
x是5
x是5
?你问题的前提(“我如何在文档中写这个?”)部分是关于英语语法,而不是语言的技术性。我认为您应该更直接地了解您真正想知道的内容-“nullptr的正式定义是什么。”而
nullptr
是空指针文字。@YSC-它是一个空指针常量。@Peter mmh。。。不确定。它可以转换为任何类型的空指针,但它本身不是指针。@YSC[注:
std::nullptr\u t
是一种既不是指针类型也不是指向成员类型的独特类型;相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或空成员指针值。请参见7.11和7.12.*-结束说明*”C++ 17 5.5.7/1HO是!谢谢你,angeW.fWw,我会考虑第三个例子,“如果<代码> PM >代码> NultpRTR <代码>,是一个编辑错误。<代码> PM >代码>是一个(只说明)指针类型的LValm表达式, NulLPTR//C>是非指针类型的PROVALY表达式,所以我不会说技术上的代码> PM < /Cord>“be”
nullptr
。我会使用第一个或第二个短语。
int_type underflow();
int sync();
void lock();