我有以下代码段,它分配了nullptr
到bool
类型。将`nullptr`分配给`bool`类型。哪个编译器是正确的?
#include <iostream>
int main()
{
bool b = nullptr;
std::cout << b;
}
在铛3.8.0工作的罚款。它给出了一个输出0
。 Clang Demo
但G ++ 5.4.0给出一个错误:
source_file.cpp: In function ‘int main()’:
source_file.cpp:5:18: error: converting to ‘bool’ from ‘std::nullptr_t’ requires direct-initialization [-fpermissive]
bool b = nullptr;
哪个编译器是正确的?
你链接的实时编译器在运行它时我得到一个编译器警告。 “警告:将nullptr常量隐式转换为'bool'[-Wullull-conversion]” – UnholySheep
根据GCC(和MSVC)给出的错误和[reference]部分(http://en.cppreference.com/ w/cpp/language/implicit_conversion)我会说这是标准所不允许的(并且Clang允许它作为扩展名) – UnholySheep
它应该不错。 'nullptr'的一个要点是使用布尔上下文中的指针来定义一个明确的事情。 : - /但是,我可以看到如何以这种转让的形式警告直接转化可能是正确的。当你有'nullptr && true'而不是'nullptr'时,编译器是否仍然出错? – Omnifarious