考虑以下初始化:
std::string falseString = false;
std::string trueString = true;
With g++ 5.2.0
,编译器会抛出警告falseString
,而错误为trueString
.
With clang++ 3.6 -std=c++11
,编译器都会抛出错误falseString
也trueString
.
Q1)为什么会有不同的行为gcc
即使两个初始化值的类型相同(bool
)?
Q2)哪个编译器是正确的,为什么?标准怎么说?
EDIT:
错误:没有从“bool”到“std::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::分配器]'
[-Wconversion-null]
对于初学者来说,你绝对不能初始化std::string
from true
。这简直是无稽之谈。
GCC 5.2 正在接受初始化false
,抗议,因为它曾经是一个有效的空指针文字。是的。比较 C++03 和 C++11 之间的 3.9.1/6 —“如下所述,bool 值表现为整数类型”已被删除。
这些天它在两个编译器上都应该出错,但是GCC 在这方面有 bug https://stackoverflow.com/a/32010054/560648直到一个月前(所以 GCC 6.0)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)