移动 std::bitset<N> 是否超过 N 个位置未定义的行为?

Is shifting std::bitset<N> more than N positions undefined behavior?

本文关键字:未定义 位置 是否 bitset std lt gt 移动      更新时间:2023-10-16

如如果计数大于类型宽度,右移是否未定义行为?中所述,如果位移位数超过有效操作数大小,则未定义移位值。

因此,在下文中,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