考虑以下初始化:
std::string falseString = false;
std::string trueString = true;
使用g++ 5.2.0
编译器,对于falseString
会产生警告,而对于trueString
则会报错。
使用clang++ 3.6 -std=c++11
编译器,对于falseString
和trueString
都会报错。
问题1:为什么gcc
的行为不同,即使两个初始化值都是相同的类型(bool
)?
问题2:哪个编译器是正确的,为什么?标准规定了什么?
编辑:
错误:从 'bool' 到 'std::string'(也就是 'basic_string')没有可行的转换
警告:将 'false' 转换为指针类型作为参数1传递给 'std::__cxx11::basic_string<_CharT, _Traits,_Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]' [-Wconversion-null]