【问题标题】:What is the difference between nullptr and nullptr_t in C++?C++ 中的 nullptr 和 nullptr_t 有什么区别?
【发布时间】:2015-06-24 20:16:58
【问题描述】:

我应该使用哪一个?如果我使用其中一个有什么优势吗?

【问题讨论】:

  • nullptr_tnullptr 的类型
  • nullptrnullptr_t 永远不能互换。这个问题没有意义。没有选择使用哪一个这样的问题。
  • Brain 今天早些时候在 Quora 上提交的同一个问题有一个very good answer。不知道你是不是问这个问题的人,因为这似乎很巧合。

标签: c++ c++11 nullptr


【解决方案1】:

nullptr 是常量,nullptr_t 是它的类型。在需要空指针或空指针类型的上下文中使用每一个。

【讨论】:

    【解决方案2】:

    “...如果我使用一个而不是另一个?”

    你不能(使用一个而不是另一个)它们通过这些方式是正交的:

    nullptr_t 是用于表示nullptr类型

    nullptr(1)实际上是nullptr_t 类型的常量,表示特定的编译器实现定义的值。

    请参阅C++11 standards 部分:

    2.14.7 指针字面量

    1. 指针文字是关键字nullptr。它是std::nullptr_t 类型的纯右值。
      [注:std::nullptr_t 是一个独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是一个空指针常量,可以转换为空指针值或空成员指针值。见 4.10 和 4.11。 ——尾注]

    1) 就像this 关键字nullptr 代表右值而不是const 类型。因此,decltype(nullptr) 可以是非const 类型。对于 Visual C++ 2015 和 MinGW g++ 5.1,它不是const

    【讨论】:

      【解决方案3】:

      truebool 类型的C++ 关键字文字完全相同,nullptrstd::nullptr_t 类型的C++ 关键字文字。

      【讨论】:

        【解决方案4】:

        nullptr 的类型为 nullptr_t

        【讨论】:

          【解决方案5】:

          如果你试试这个

          cout << typeid(nullptr).name() << endl;
          

          你会看到 nullptr 的类型是 std::nullptr_t。

          【讨论】:

            【解决方案6】:

            nullptrstd::nullptr_t 类型的指针文字。 而且nullptr 也是 C++ 的关键字,与布尔文字 false 和 true 相同。:)

            【讨论】:

              【解决方案7】:

              来自 [lex.nullptr]:

              指针文字

              指针字面量
              nullptr

              指针文字是关键字nullptr。它是std::nullptr_t 类型的纯右值。 [注:std::nullptr_t 是一个独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的prvalue是 一个空指针常量,可以转换为空指针值或空成员指针值。见 4.10 和 4.11。 ——尾注]

              因此,当您需要指针文字时使用nullptr,当您需要采用该类型时,请在上下文中使用std::nullptr_t。后者,例如,如果您正在创建一个函数或构造函数或可以将nullptr 作为参数的东西。

              【讨论】:

                猜你喜欢
                • 2021-10-27
                • 1970-01-01
                • 2014-03-01
                • 2011-04-05
                • 2018-05-27
                • 1970-01-01
                • 2011-10-18
                • 1970-01-01
                • 2010-09-09
                相关资源
                最近更新 更多