【问题标题】:C++11 auto variable initialized by nullptr由 nullptr 初始化的 C++11 自动变量
【发布时间】:2013-11-29 21:33:43
【问题描述】:

C++ 11 标准中由

初始化的变量“something”的类型是什么
auto something = nullptr;

?

【问题讨论】:

  • decltype(nullptr) ;)
  • void*? std::nullptr_t?
  • 我看到它可以编译,但这是一个逻辑错误:)

标签: c++ c++11 auto nullptr


【解决方案1】:

它的类型是 std::nullptr_t,它是 C++11 中引入的单值类型,用于表示空指针,并且可以隐式转换为任何其他指针类型。

【讨论】:

  • @mdkess: 2.14.7 [lex.nullptr]/1 指针字面量是关键字nullptr。它是 std::nullptr_t 类型的纯右值。 在标准中,该类型的存在不需要该值,尽管我可以看到在标头中使用该 typedef 作为实现细节的实现。如果他们愿意,他们也可以typedef delctype(1) int;,因为先有鸡还是先有蛋只是一个细节
  • 这让事情变得混乱。
  • @mdkess:是什么让我们感到困惑?有一个类型 std::nullptr_t 和一个关键字 nullptr,它是该类型的 prvalue。与std::istream 类型和全局std::cin 没有太大区别(除了nullptr 是关键字,而不仅仅是全局)
  • “我可以看到在标头中使用该 typedef 作为实现细节的实现”。我不会说这是一个实现细节,因为它是标准强制性的。 18.2[support.types]/9 说“nullptr_t 定义如下: namespace std { typedef decltype(nullptr) nullptr_t; }”。无论如何,鸡和蛋对nullptr/nullptr_t来说不是问题。
  • @CassioNeri:由 as-if 规则覆盖。可移植程序无法真正检测到它是如何准确定义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多