C++11中使用nullptr初始化自动变量

6
在C++11标准中,变量“something”的类型是什么?
auto something = nullptr;

?


6
decltype(nullptr) ;) - Xeo
void*std::nullptr_t - Zac Howland
我看到它编译通过了,但是存在逻辑错误 :) - Nick
1个回答

12

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


@mdkess: 2.14.7 [lex.nullptr]/1 *指针字面值是关键字nullptr。它是std::nullptr_t类型的prvalue。在标准中,该类型存在而不需要该值,尽管我可以看到实现在头文件中使用该typedef作为实现细节。如果他们想要,他们也可以做typedef delctype(1) int;,因为鸡还是蛋先出现只是一个细节。 - David Rodríguez - dribeas
那会让事情变得混乱。 - mindvirus
@mdkess:什么让你感到困惑?有一种类型std::nullptr_t和一个关键字nullptr,它是该类型的prvalue。与std::istream类型和全局std::cin不太不同(除了在nullptr的情况下它是一个关键字,而不仅仅是一个全局变量)。 - David Rodríguez - dribeas
1
我可以看到在头文件中使用typedef作为实现细节的实现。我不会说这是一个实现细节,因为它是标准强制要求的。18.2[support.types]/9说:“nullptr_t 定义如下: namespace std { typedef decltype(nullptr) nullptr_t; }”。无论如何,对于nullptr/nullptr_t来说,鸡生蛋的问题并不是一个问题。 - Cassio Neri
@CassioNeri:受“似乎”规则的保护。一个可移植程序无法真正检测到它的确切定义。 - MSalters
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接