如如果计数大于类型宽度,右移是否未定义行为?中所述,如果位移位数超过有效操作数大小,则未定义移位值。
因此,在下文中,bar
的值未定义:
uint32_t foo = 123;
uint32_t bar = (foo >> 33);
这种轮班操作是否为std::bitset
定义得很好?如:
std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
我可以在哪个官方文档中找到此类信息?
该案在cpp偏好(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt(中没有明确说明。
结果由标准 [bitset.members]/9 定义为 0:
bitset& operator>>=(size_t pos( noexcept;
9 效果:将 *this 中位置 I 处的每个位替换为一个值 确定如下:
(9.1( 如果 pos>= N - I,则新值为零;
(9.2( 如果 pos