是移位std :: bitset <N>多于N位置未定义的行为?

Ale*_*der 4 c++ bit-shift language-lawyer c++11 c++14

如果计数大于类型的宽度,如右移未定义行为中所讨论的那样如果位移数超过有效操作数大小,则移位值是不确定的.

因此,在下面,值bar是未定义的:

uint32_t foo = 123;
uint32_t bar = (foo >> 33);
Run Code Online (Sandbox Code Playgroud)

这种轮班操作是否定义明确std::bitset?如:

std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
Run Code Online (Sandbox Code Playgroud)

我可以在哪个官方文件中找到这样的信息?

该案例未在cppreference上明确说明(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt).

lll*_*lll 9

结果由标准定义为0,[bitset.members]/9:

bitset&operator >> =(size_t pos)noexcept;

9效果:将*中的位置I处的每个位替换为如下确定的值:

(9.1)如果pos> = N - I,则新值为零;

(9.2)如果pos <N - I,则新值是位置I + pos处的位的先前值.