
Александр
09.05.2017
12:23:49
Народ, подскажите. Пишу свой костыль, храню pod-типы в обычном uint8_t[]. Когда кастю их к чему-то конкретному, возникают баги, что объекты побитово одинаковые, а вот == даёт false. Я так понимаю, это из-за UB - как пофиксить? clang 5.0

Square
09.05.2017
12:27:39
потому что == для твоих pod типов не определен мб?
вообще сумбурно написал, переформулировать бы...

Alex Фэils?︙
09.05.2017
12:28:26

Google

Surreal
09.05.2017
12:28:31

Square
09.05.2017
12:29:06
не кидайте помидорами ток за паскакаль)

Александр
09.05.2017
12:33:55
Сейчас объясню. Есть динамический массив uint8_t. Пусть размер = 4, использую для хранения int32_t. Для работы с битовым представлением запилил метод
std::bitset<32>& Bits() { return *(std::bitset<32>*)ptr_to_raw; }. Вроде как std::bitset хранит биты последовательно, поэтому выдачу я получаю нормальную выдачу при std::cout << obj.Bits() << std::endl;

Friedrich
09.05.2017
12:34:05

Square
09.05.2017
12:36:45

Aidar
09.05.2017
12:38:21
А хотя битсет же

Александр
09.05.2017
12:38:41

Square
09.05.2017
12:39:54
"нормальный" int32_t со своим?

Александр
09.05.2017
12:40:37

Google

Antony
09.05.2017
12:42:32

Александр
09.05.2017
12:43:11
Я догадываюсь, что всё это UB и зависит от реализаций библиотеки

Antony
09.05.2017
12:44:38
А еще от реализаций компилятора, длины машинного слова, endianness, содержимого вашего POD и десятка ключей компиляции

Surreal
09.05.2017
12:45:04

Александр
09.05.2017
12:45:59
Мне на самом деле всё равно, лишь бы для одинаковых объектов было одинаковое представление.

Aidar
09.05.2017
12:50:01
Ммм

Александр
09.05.2017
12:50:06
Да это всё понятно. Я не хочу с нуля делать интерфейс bitset'а

Aidar
09.05.2017
12:50:10
Типобезопасненько

Surreal
09.05.2017
12:51:03

Aidar
09.05.2017
12:51:17
По-моему в таких случаях просто делают юнион с uint8_t[0] но это тоже пахнет уб

Evgeniy
09.05.2017
12:51:20

Antony
09.05.2017
12:51:30
Не будет работать. Найдите две причины почему

Alex Фэils?︙
09.05.2017
12:53:14

Andrei
09.05.2017
12:53:27

Александр
09.05.2017
12:53:40

Surreal
09.05.2017
12:53:45
Но тут детерминированная реализация зато.

Alex Фэils?︙
09.05.2017
12:53:51

Evgeniy
09.05.2017
12:54:08

Google

Evgeniy
09.05.2017
12:54:08
проще помочь будет

Александр
09.05.2017
12:54:44
Окей. Хочу попробовать реализацию генетического алгоритма, манипулируя исключительно битами, не смотря на структуру хранения. Хрень выйдет или нет

Andrei
09.05.2017
12:54:51
Мне кажется это типичный пример http://xyproblem.info/

Aidar
09.05.2017
12:55:35
И оператор сравнения

Andrei
09.05.2017
12:56:06

Evgeniy
09.05.2017
12:56:14

Александр
09.05.2017
12:56:19

Aidar
09.05.2017
12:56:29
И что

Александр
09.05.2017
12:56:30
Я в курсе про XY, но знаю, чего хочу)

Admin
ERROR: S client not available

Evgeniy
09.05.2017
12:56:55

Evgeniy
09.05.2017
12:56:56
напиши функции делающие эти операции

Andrei
09.05.2017
12:57:00
Зачем? Меня что-нибудь слышит?
пусть конструирует bitset!!!!
У него есть конструктор.

Aidar
09.05.2017
12:57:23
Пусть конструирует битсет

Александр
09.05.2017
12:57:30

Evgeniy
09.05.2017
12:57:49

Andrei
09.05.2017
12:58:12
Если тебе известен размер, битсета, делаешь reinterpret_cast

Google

Andrei
09.05.2017
12:58:23
И по 8 байт сдвигая копируешь
Получаешь свой замечательный битсет.

Aidar
09.05.2017
12:59:25

Александр
09.05.2017
12:59:27
Отнаследоваться от битсета и добавить конструкторов?)

Evgeniy
09.05.2017
12:59:55

Andrei
09.05.2017
13:00:55

Alexander
09.05.2017
13:00:58
Я может пропустил мгновение, но почему человек не может написать простую функцию для сериализации его структуры в в набор битов?

Evgeniy
09.05.2017
13:01:50

Александр
09.05.2017
13:01:53
Не сработает, да и сишный каст почти такой же

Alexander
09.05.2017
13:02:21

Aidar
09.05.2017
13:02:24
Чозадичь

Alexander
09.05.2017
13:02:28
?