3

考虑以下代码:

// E1 << E2 with E1 bool, and E2 an integer
true << static_cast<char>(1);
true << static_cast<short int>(1);
true << static_cast<int>(1);
true << static_cast<unsigned int>(1);
true << static_cast<long long int>(1); 
true << static_cast<long long unsigned int>(1);

做操作的时候,E1提升为与 相同的类型E2,还是先提升到int,再提升到std::common_type<E1, E2>::type

换句话说,就是:

true << static_cast<char>(9);

已定义或未定义的行为?

4

1 回答 1

3

来自 [expr.shift]:

操作数应为整数或非范围枚举类型,并执行整数提升。结果的类型是提升的左操作数的类型。

来自 [conv.prom]:

类型的纯右值bool可以转换为类型的纯右值intfalse变为零和true变一。

bool产品综合推广int。所以结果类型true << (any integral type)int. true << static_cast<char>(9)积分提升后与 相同1 << 9,定义为512

于 2015-09-26T19:01:08.397 回答