簡體   English   中英

正在轉移std :: bitset <N> 超過N個位置未定義的行為?

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

如果計數大於類型的寬度,如右移未定義行為中所討論的那樣 如果位移數超過有效操作數大小,則移位值是不確定的。

因此,在下面, 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, [bitset.members] / 9

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

9效果:將*中的位置I處的每個位替換為如下確定的值:

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

(9.2)如果pos <N - I,則新值是位置I + pos處的位的先前值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM