如Is right shift undefined behavior if the count is larger than the width of the type?中所述,如果位移位数超过有效操作数大小,则移位值是不确定的。
因此,下面的bar
的值是不确定的:
uint32_t foo = 123;
uint32_t bar = (foo >> 33);
是否为std::bitset
定义了这样的移位操作?如:
std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
我可以在哪个正式文件中找到此类信息?
没有在cppreference(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt)上明确说明该情况。
答案 0 :(得分:9)
结果根据标准[bitset.members]/9定义为0:
bitset&operator >> =(size_t pos)noexcept;
9效果:将* this中位置I的每一位替换为一个值 确定如下:
(9.1)如果pos> = N-I,则新值为零;
(9.2)如果pos