![](/img/trans.png)
[英]How can I cast an std::bitset<N> to an std::bitset<M>?
[英]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.