nullptr或nullptr

时间:2018-05-18 12:27:33

标签: c++ null language-lawyer

如果我在谈论nullptr,那么正确的术语是 nullptr(只有一个,并且所有提及都是对同一事物的引用),或者< strong> a nullptr(有几件相同的东西)。

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

  

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

  

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

(迂腐地说,这不是一个基于意见的问题,因为它可以通过参考完全 nullptr来回答。

3 个答案:

答案 0 :(得分:24)

标准本身可以互换使用三种形式,但它们都不是“是nullptr”或“是nullptr”。如果您使用这三种中的任何一种,那么您就是一个很好的公司。

为空

int_type underflow();
     

7 备注: basic_streambuf的公共成员仅在gptr()为空或gptr() >= egptr()

时调用此虚拟函数

是空指针

int sync();
     

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

nullptr

void lock();
     

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

答案 1 :(得分:15)

nullptr是一个关键字,用于指定类型为std::nullptr_t的prvalue。超正式地,指针因此不能是[a |] nullptr。但是,它可以是空的&#34; (或&#34;具有空值&#34;)。

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

  

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

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

答案 2 :(得分:0)

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

即便如此,你仍然会在明确你的意思的背景下说“nullptr”。

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