nullptr 或 nullptr [closed]

A nullptr or the nullptr [closed]

提问人:Raedwald 提问时间:5/18/2018 最后编辑:Raedwald 更新时间:5/19/2018 访问量:1676

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

5年前关闭。

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

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

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

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

(迂腐地,这不是一个基于意见的问题,因为它可以通过参考到底是什么来回答)nullptr

c++ 语言律师

评论

8赞 mkrieger1 5/18/2018
github.com/isocpp/CppCoreGuidelines/blob/master/......似乎大多根本没有使用冠词,我发现这与说“x 是 5”或“x 是真的”是一致的。然而,在多读了一会儿之后,我发现出现了一些“nullptr”。
2赞 pipe 5/18/2018
我喜欢在这里使用标签。language-lawyer
1赞 Passer By 5/19/2018
我试图在这个问题中看到价值,但没有成功。这似乎更像是一个编辑问题,因为它不会改变语言的语义。我什至认为这不是主题。
1赞 Passer By 5/19/2018
@Raedwald 我不明白。那么它与链接的“到底什么是nullptr”有何不同?
1赞 oldmud0 5/19/2018
你有没有说过或?你问题的前提(“我如何在文档中写这个?”)部分是关于英语语法,而不是语言的技术性。我认为你应该更直接地说明你真正想知道的事情——“nullptr 的正式定义是什么”。x is the 5x is a 5

答:

15赞 Angew is no longer proud of SO 5/18/2018 #1

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

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

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

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

评论

3赞 YSC 5/18/2018
并且是空指针文本nullptr
0赞 Peter 5/18/2018
@YSC - 它是一个空指针常量。
0赞 YSC 5/18/2018
@Peter嗯......不确定。它可以转换为任何类型的 null 指针,但它本身不是指针。
1赞 Angew is no longer proud of SO 5/18/2018
@YSC “[ 注意:是一种不同的类型,它既不是指针类型,也不是指向成员类型的指针;相反,此类型的 prvalue 是 null 指针常量,可以转换为 null 指针值或 null 成员指针值。参见 7.11 和 7.12.* —尾注* ]“ C++17 5.13.7/1std::nullptr_t
0赞 YSC 5/18/2018
呵呵!谢谢你@Angew。
24赞 user743382 5/18/2018 #2

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

为 null

int_type underflow();

7 备注:仅当 is null 或basic_streambufgptr()gptr() >= egptr()

是 null 指针

int sync();

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

nullptr

void lock();

3 投掷:[...] 错误条件为 if 为 。[...]system_erroroperation_not_permittedpmnullptr

评论

2赞 Quuxplusone 5/19/2018
FWIW,我认为第三种情况,“如果是”,是一个编辑错误。 是指针类型的(仅说明)左值表达式,并且是非指针类型的 prvalue 表达式,所以我不会说技术上可以“是”。我会使用第一个或第二个措辞来代替。pmnullptrpmnullptrpmnullptr
0赞 Davislor 5/19/2018 #3

说“a”可能有意义的一种上下文是,每个指针类型都有一个指针值,并且这些值不一定对每个实现中的所有类型都相同。(尽管您必须返回近五十年前的一些过时计算机才能找到例外情况。有人可能会称 “a ” 和 “a ”,即使它们都不与 type 的常量完全相同。无论如何,我会把它发音为“指针”。nullptrNULLint* maybe_int_p = nullptr;nullptrchar* maybe_string_p = nullptr;nullptrnullptr_tNULL

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

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