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

时间:2018-07-04 13:36:53

标签: c++ c++11 c++14 language-lawyer bit-shift

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)上明确说明该情况。

1 个答案:

答案 0 :(得分:9)

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

  

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

     

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

     

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

     

(9.2)如果pos