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

Struct foo_int{ unique_ptr<byte> _buf; int& _int;

foo_int(unique_ptr<byte>&& b) : _buf(move(b), _int(*lounder(reinterpret_cast<int*>) _buf.get())
{}

operator int&() {return _int;}
}

Нормально или уб?

29 ответов

83 просмотра

byte в int?

Int-Unsigned Автор вопроса
Kelbon
byte в int?

Я ему lounder сказал, все прочее ок

Int Unsigned
Я ему lounder сказал, все прочее ок

launder может? А есть гарантии, что объект создан?

UB

Int-Unsigned Автор вопроса
Vlad
UB

На сколько я понял lounder, он как раз предназначен для того, чтобы сказать что объект есть. А иначе бы просто каста хватало.

Int Unsigned
На сколько я понял lounder, он как раз предназначе...

std::launder тесно связан с таким явлением, как transparent replacement: http://eel.is/c++draft/basic#life-8

Если это std::byte и std::launder(), а также есть хотя бы массив этих байтов подходящей для int длины и выравнивания, то нормально с C++20.

Vlad
а что делать со strict aliasing?

А (нарушения) его там нет: я просто исхожу из предположения, опять же, что под unique_ptr на самом деле массив байтов, а не один байт.

Sergey Anisimov
А (нарушения) его там нет: я просто исхожу из пред...

как можно проинициализировать инт, не осуществив доступ к памяти байтов через выражение типа инт?

Vlad
как можно проинициализировать инт, не осуществив д...

Так мы осуществляем, просто создание alignas(int) std::byte[sizeof(int)] создает (ретроактивно) и сам int, к которому мы получаем доступ через прачечную (без нее было бы нельзя). Edit: Сам инициализированный int нам же тут не нужен - мы ссылку на него инициализируем же. Т.е. indeterminate-value не вычисляется, если речь об этом.

Sergey Anisimov
Так мы осуществляем, просто создание alignas(int) ...

так для инициализации ссылки все равно valid object нужен, которого нет

Vlad
так для инициализации ссылки все равно valid objec...

А почему нет, если массив байтов есть? Я на это положение ссылаюсь, его должно быть достаточно.

Sergey Anisimov
А почему нет, если массив байтов есть? Я на это по...

массив байтов это не массив интов или вы трактуете этот пункт так, что int создастся неявно в таком массиве?

Vlad
массив байтов это не массив интов или вы трактуете...

Разумеется, это же одна из "фундаментальных магий" этих типов в современном языке) Edit: Это работает только в отношении implicit-lifetime-type, разумеется, но int к ним относится.

Sergey Anisimov
Разумеется, это же одна из "фундаментальных магий"...

я нахожу это толкование расширительным, поэтому иду смотреть на документ, из которого этот параграф пришел

Int-Unsigned Автор вопроса
Sergey Anisimov
Если это std::byte и std::launder(), а также есть ...

Спасибо, добрый человек. А то я совсем загрустил перед перспективой реаллокптор на брутальных сях выписывать.

Vlad
я нахожу это толкование расширительным, поэтому ид...

Несколько удивлен, честно говоря: я предполагал, что эта информация уже давно довольно известна здесь. Если не ошибаюсь, с Вами же не раз уже обсуждали эту тему в т.ч. полагаясь на это положение...

Int-Unsigned Автор вопроса
Vlad
так для инициализации ссылки все равно valid objec...

Ок. Я тудой референс-враппер вставлю вместо ссылки. Он, вообще то, реально там - чтобы мув не терять.

Int Unsigned
Ок. Я тудой референс-враппер вставлю вместо ссылки...

Ну замечание про [] выше было уместное: под это unique_ptr специализирован отдельно, чтобы корректно сочетать new/delete.

Sergey Anisimov
Несколько удивлен, честно говоря: я предполагал, ч...

то, что неявное создание объектов работает и под таким углом, для меня скорее новость

какие у вас планы на ссылку, которую возвращает operator int&?

Vlad
то, что неявное создание объектов работает и под т...

Что, в свою очередь, уже новость для меня =)

возможно, я это забыл когда я думам про неявное создание объектов сейчас, ничего кроме примера с malloc на ум не приходило хотя https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html#type-punning я перечитывал не раз

Int-Unsigned Автор вопроса
Vlad
возможно, я это забыл когда я думам про неявное со...

Но по Вашей ссылке /// new (buffer) std::byte[sizeof(buffer)]; /// То есть создание !массива! Массив в плюсах это вообще отдельная магия не поддающаяся разумению.

Int Unsigned
Но по Вашей ссылке /// new (buffer) std::byte[size...

Уточните, что именно не поддается разумению в массивах.

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта