Сдвиг std :: bitset <N>больше чем N позиций неопределенного поведения? - PullRequest
0 голосов
/ 04 июля 2018

Как обсуждалось в Является ли сдвиг вправо неопределенным поведением, если число больше ширины типа? , сдвиг значения не определен, если число сдвигов битов превышает эффективный размер операнда.

Таким образом, в дальнейшем значение 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 голосов
/ 04 июля 2018

Стандарт определяется как 0, [bitset.members] / 9 :

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

9 Эффекты: заменяет каждый бит в позиции I в * на значение определяется следующим образом:

(9.1) Если pos> = N - I, новое значение равно нулю;

(9.2) Если pos

...