下面有一个将nullptr分配给bool类型的代码片段。
#include <iostream>
int main()
{
bool b = nullptr;
std::cout << b;
}在中clang3.8.0工作良好。它给出了输出0。Clang演示
但是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;哪个编译器是正确的?
发布于 2017-10-18 17:29:15
来自C++标准(4.12布尔转换)
1算术、非作用域枚举、指针或成员类型指针的prvalue可转换为bool类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值都转换为真。用于直接初始化(8.5),可以将std::nullptr_t类型的prvalue转换为bool类型的prvalue;结果值为false。
所以这个声明
bool b( nullptr );是有效的
bool b = nullptr;是错的。
我自己已经在异翻上指出了这个问题
https://stackoverflow.com/questions/46815821
复制相似问题