【问题标题】:A nullptr or the nullptr [closed]一个 nullptr 或 nullptr [关闭]
【发布时间】:2018-05-18 12:27:32
【问题描述】:

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

也就是说,功能文档应该说

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

或

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

(学究式地,这不是一个基于意见的问题,因为它可以通过参考 确切 nullptr 是什么来回答)

【问题讨论】:

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

标签: c++ null language-lawyer


【解决方案1】:

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

为空

int_type underflow();

7 备注:basic_streambuf的公共成员只有在gptr()为空或gptr() >= egptr()时才调用这个虚函数

是一个空指针

int sync();

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

是nullptr

void lock();

3 抛出: [...] system_error 如果pm 是nullptr,则错误条件为operation_not_permitted。 [...]

【讨论】:

  • FWIW,我认为第三种情况“如果 pm 是 nullptr”是编辑错误。 pm 是指针类型的(仅用于说明的)左值表达式,nullptr 是非指针类型的纯右值表达式,所以我不会在技术上这么说 pm can "是”nullptr。我会改用第一个或第二个短语。
【解决方案2】:

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

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

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

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

【讨论】:

  • 而nullptr 是空指针字面量。
  • @YSC - 它是 a 空指针常量。
  • @Peter mmh ...不确定。它可以转换为任何类型的空指针,但它不是指针本身。
  • @YSC "[ 注意: std::nullptr_t 是一个独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是空指针常量,可以转换为空指针值或空成员指针值。参见 7.11 和 7.12.* —end note* ]" C++17 5.13.7/1
  • 嘿,是的!谢谢@Angew。
【解决方案3】:

说“nullptr”可能有意义的一个上下文是,每个指针类型都有一个 NULL 指针值,并且对于每个实现中的所有类型,这些值不一定相同。 (尽管你必须回到近 50 年前的一些过时计算机才能找到例外情况。)有人可能会称int* maybe_int_p = nullptr;“a nullptr”和char* maybe_string_p = nullptr;“a nullptr”,尽管这些都不是与nullptr_t 类型的常量完全相同。无论如何,我的发音与“NULL 指针”相同。

即便如此,你仍然会在你的意思很清楚的情况下说“nullptr”。

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

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多