Я хотел попроще сделать, без лишних оберток и инклюдов
union move_ty { bitset <2> bs2; bitset <3> bs3; bitset <4> bs4; bitset <5> bs5; }; Это ты считаешь проще ? У тебя этот тип хранит от 2 до 5 бит. Это же может хранить std::bitset <5> Кроме этого, у тебя там UB - надо сначала что-то записать в один из членов UNION, только потом можно читать. Ты не пишешь.
У меня поле класса 0м инициализируется
Это, возможно, тоже UB, но я не уверен. В любом случае, ты инициализируешь ОДИН член данных, а видимо читать хочешь из любого из них, в зависимости от вызова operator []
Это точно плохая идея
Такой вот небезопасный код, получается
Главное, не понятна сама идея. Вот если бы ты просто напихал туда 5 битиков - я б понял. Просто положил бы туда bitset<5> - я б понял. Тут -то какая идея, нахрена тут union ?
Ну, на самом деле, для битсета это не так страшно, просто более старшие биты будут нулями и все
Да, специфический проект у меня)
Ещё раз, ты не имеешь права читать ни один другой член union, кроме проинициализированного.
Потому я и говорю тут будет вероятно UB и непонятные багт
Может быть. Я думал, могу
я так делал, с простыми типами работало
Сейчас приедет полиция типобезопасного программирования же, аккуратнее
но действительно очень мерзкая тема, лучше тестами покрыть, что читается из такого union все правильно
ЗАЧЕМ там union вообще 7
Обсуждают сегодня