170 похожих чатов

А как происходит копирование(например при возвращении из функции) union. Вызывается

конструктор от первого поля или побитам?

27 ответов

34 просмотра

Копи ктор первого поля. Если он тривиальный, компилятор может бахнуть memcpy где имеет смысл

Maus-Grau Автор вопроса
Artöm Bakri Al-Sarmini
Копи ктор первого поля. Если он тривиальный, компи...

Т.е. может быть union union_t { bool first; double second; } union_t func(){ union_t uni; uni.second = 1.0; return uni; } ... auto res = func(); res.second // 0.0

Maus Grau
Т.е. может быть union union_t { bool first; do...

А зачем использовать юнионы?

Maus-Grau Автор вопроса
Alexander Karaev
А зачем использовать юнионы?

Чтобы пустые поля не делать, все равно только одно значение может быть. Но я думаю здесь намек на variant.

Maus-Grau Автор вопроса
Alexander Karaev
Да. Сырой union - злющее зло

А variant больше памяти жрет? Просто не смотрел его реализацию

Maus Grau
А variant больше памяти жрет? Просто не смотрел ег...

Он жрёт память минимально возможное количество для его реализации. sizeof() наибольшего поля + sizeof() для индекса типа активного типа + выравнивание

Maus-Grau Автор вопроса
Alexander Karaev
Он жрёт память минимально возможное количество для...

Плохо( нужно минимум памяти. Так как это используется в векторах длина которых экспоненциальна, а таких нод до 2,5млн. И тип определяется один на вектор, поэтому нет смысла хранить тип в каждом обьекте

Maus-Grau Автор вопроса
Alexander Karaev
variant<vector<double>, vector<int>, ...>

Тогда я не смогу перевести один тип в другой без копирования вектора(выделения новой памяти)

Maus Grau
Тогда я не смогу перевести один тип в другой без к...

Что значит "перевести"? variant<vector<int>, vector<double>> - это по сути или вектор целых чисел, или вектор double'ов. Что и куда нужно переводить? Не понимаю

Maus-Grau Автор вопроса
Alexander Karaev
Что значит "перевести"? variant<vector<int>, vecto...

Мне нужно bool и double. И возможность перевести из bool в double. Если bool = false : double =0.0. Если bool = true : double = 1.0

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Maus Grau
Мне нужно bool и double. И возможность перевести и...

Хм. Но зачем? Если нужно работать с этим вектором как с честным массивом каких-то значений, то имеет смысл хранить всегда double, а интерфейс уже сделать удобным. Т.е. ничего не мешает конвертировать double -> bool на лету, при обращении.

Maus Grau
Мне нужно bool и double. И возможность перевести и...

Если ты опишешь задачу чуть подробнее, возможно придумаем решение получше

Maus-Grau Автор вопроса
Alexander Karaev
Хм. Но зачем? Если нужно работать с этим вектором ...

Так и было раньше, но мне показалось что с разделением будет лучше, не будет 0.9999 и т п.

Maus Grau
Так и было раньше, но мне показалось что с разделе...

Если класть в double ровно единицу, она там и будет лежать

Maus-Grau Автор вопроса

Блин, вот это вопрос... Я кажется ни разу в жизни юнион не возвращал из фукнции... Объекты с юнионом - да, бывало, а вот так вот чтоб голый UNION...

Maus Grau
Мне нужно bool и double. И возможность перевести и...

Для этого не нужен юнион, для этого нужно преобразование типа.

если все члены union тривиально копируемы, то он побайтово копируется, и те объекты, которые были «живы» в исходном union, «оживают» в копии. «объекты» во множественном числе, потому что это применяется рекурсивно ко всем подобъектам http://eel.is/c++draft/class.copy.ctor#15 http://eel.is/c++draft/class.union#general-note-3 если что-то не копируется тривиально, то нужно писать это руками

Artöm Bakri Al-Sarmini
Озадачил. Ждем Влада

меня стоит звать через @, потому что добрую половину этого чата я проматываю (если это про меня)

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Maus Grau
Спасибо

поправил первую ссылку на стандарт

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта