UB — это не то, что может возникать из-за оптимизаций. UB — это свойство кода и от уровня оптимизаций не зависит.
В данном случае код вполне корректный, единственная проблема — это отсутствие проверки выравнивания. Но мы захотели сделать наш код ещё быстрее, в итоге комитет выдал перлы уровня «вызывайте мемкопи, который оптимизатором будет отбрасываться и заменятся на прямое обращение к памяти»
Слишком уж много кода зависит от reinterpret_cast, и тут дело не в том что мы используем, а все так писали достаточно долго.
А вот пример из статьи несколько преувеличен, адресная арифметика работает в С++ как и положено, и даже в примере автора не будет UB, потому что у него лишь указатель на
expression (P)+1 points one past the last element of the array object,
Если бы всё было так плохо как он описал, то как он предлагает реализовавать аллокаторы для стандартных контейнеров? Там на сколько я знаю всё ещё такой интерфейс
А давайте без давайте. Я и так по сути роюсь в референсах и стандартах за вас, а вы только задаете вопросы в стиле «что это за фигня, с какой стати». Недовольное лицо тут пока только у вас.
Могли бы себя и не утруждать.
От ваших референсов если честно вообще толку ноль, больше похоже на «на утрись, в стандарте так написано». Сами же вы похоже не понимаете зачем это там написано. Так что пожалуйста оставьте свой аггресивный тон себе, и возможно вашим коллегам, нет никакого сымысла делать это в публичном месте.
А я уже и без вашей помощи нашел, что существует en.cppreference.com/w/cpp/numeric/bit_cast предназначенный для решения задач, которые раньше решались через reinterpret_cast.
Недовольное лицо тут пока только у вас.
Не надо приписывать свои эмоции мне, я лишь выражал удивление и восторг.
> Небольшое отступление: в С++ арифметика указателей работает только с указателями на элементы массива.
Consider the following natural C program:
struct X { int a, b; };
X *make_x() {
X *p = (X*)malloc(sizeof(struct X));
p->a = 1;
p->b = 2;
return p;
}
When compiled with a C++ compiler, this code has undefined behavior, because p->a attempts to write to an int subobject of an X object, and this program never created either an X object nor an int subobject.
Серьёзно? С какого момента это появилось в С++ и зачем?
До какой-то версии анриала, может 4.20 у меня таких проблем тоже не было. Сейчас это вроде обычное дело. Спасибо за наводку в каком направлении смотреть.
Можно ли управлять какие .dll загружает дебаггер, и настраивать соответсвтвие исходников и .dll?
Есть такая проблема в Unreal Engine 4, при инкрементальном билде код собирается в новую .dll (UE4Editor-MyProject-инкрементальный номер.dll), редакто перезагружает новую .dll через механизм HotReload, но дебагер студии загружает символы из оригинальной UE4Editor-MyProject.dll из-за этого не работают ни брейкпоинты ни дебаг в принципе.
Есть и для цпп, только оно зачем-то сортирует ошибки по алфавиту (?) а не показывает в порядке в котором они произошли, что в силу специфики компиляции с++ программ не имеет совершенно никакого смысла.
Плюс, там далеко не вся информация об ошибке, и читать её не удобно.
Я даже не могу толком понять, почему Win 10 вызывает у меня такое отторжение — или интерфейс, или постоянные обновления, или «мы всё переделали, попробуй догадайся, куда мы засунули привычную настройку»…
Поверьте, вы не первый. Мы всё это уже давно испытали, когда робко запускали вин 3.11 в досе, потом когда перезодили с доса на вин95, потом когда переходили с вин9х на вин2к+. Потом представьте какой у нас всех был шок, когда появилась ХП. Некоторые так испугались что случайно перешли на Висту. Семерка тоже что-то не сразу зашла. Ну а потом 8, 8.1, 10 мы покатились понаклонной
Можно сколько угодно злословить о неграмотности чиновников и привязывать сюда политику, но эта ситуация, как и многие другие с отечественным ПО, показывают реальный уровень отечественных разработчиков не способных сделать что-либо качественно и до конца. Гн милтря на постоянные победы на олимпиадах к сожалению большинство кодеров (и присутствующих тут) способны только на едкие замечания и пустые беспредметные споры.
Странно что «великая компания добра» Яндекс ещё подобного сервиса не запустила, или не такая уж и компания добра. Да и сами исходники на гитхабе зранят, и не боятся. Вон гугл даже боится, и ни какой крым не присоединял.
Boeing-737 Max был обновлением конструкции 50-летней давности, и изменения должны были быть достаточно ограниченными, чтобы Боинг мог штамповать новые самолёты как горячие пирожки, с небольшими изменениями для сборочных линий или авиакомпаний. “Для инженера, это не самая лучшая работа”, добавил Лемм.
Странно, всегда думал, что жто наивсышый челендж для инженера. Что-то сродни «подковать блоху». На ферарри конечно после этого не уедешь, но ограниченные условия всегда заставляют блеснуть мыслью и необычным подходом.
Ну гугл вообще удивительная корпорация, пока я жил в китае мне нотификации о новых видео на ютубе приходили и на английском и на французском и на голландском и на немецком. Каждый раз как я заходил с нового впн, гугл думал что я вучивал новый язык.
Еще забыли совет, хотя он уже наверное из 2000-ых
«Всегда определяйте по ИП на каком языке говорит пользователь, ведь все люди всегда сидят дома и никто никогда никуда не ездит. А заголовок content-language вообще придумали недальновидные люди, ведь его никогда не настраивают и ни один браузер не предлагает его настроить.»
Статья интересная, спасибо. Только почему по спектром-рг, фотография спектра-р. Это же совершенно разные телескопы, да и спектр-р уже отлетал.
Кстати ссылка на оригинал битая.
В данном случае код вполне корректный, единственная проблема — это отсутствие проверки выравнивания. Но мы захотели сделать наш код ещё быстрее, в итоге комитет выдал перлы уровня «вызывайте мемкопи, который оптимизатором будет отбрасываться и заменятся на прямое обращение к памяти»
Слишком уж много кода зависит от reinterpret_cast, и тут дело не в том что мы используем, а все так писали достаточно долго.
А вот пример из статьи несколько преувеличен, адресная арифметика работает в С++ как и положено, и даже в примере автора не будет UB, потому что у него лишь указатель на
Если бы всё было так плохо как он описал, то как он предлагает реализовавать аллокаторы для стандартных контейнеров? Там на сколько я знаю всё ещё такой интерфейс
Могли бы себя и не утруждать.
От ваших референсов если честно вообще толку ноль, больше похоже на «на утрись, в стандарте так написано». Сами же вы похоже не понимаете зачем это там написано. Так что пожалуйста оставьте свой аггресивный тон себе, и возможно вашим коллегам, нет никакого сымысла делать это в публичном месте.
А я уже и без вашей помощи нашел, что существует en.cppreference.com/w/cpp/numeric/bit_cast предназначенный для решения задач, которые раньше решались через reinterpret_cast.
Не надо приписывать свои эмоции мне, я лишь выражал удивление и восторг.
На сколько я помню это только для неPOD типов.
это, как и пример из статьи, вообще как-то дико звучит. С какой стати?
PS. Давайте тон попроще а? В моем сообщении вполне выделены два пункта, не надо тут делать недовольное лицо.
Серьёзно? С какого момента это появилось в С++ и зачем?
Есть такая проблема в Unreal Engine 4, при инкрементальном билде код собирается в новую .dll (UE4Editor-MyProject-инкрементальный номер.dll), редакто перезагружает новую .dll через механизм HotReload, но дебагер студии загружает символы из оригинальной UE4Editor-MyProject.dll из-за этого не работают ни брейкпоинты ни дебаг в принципе.
Плюс, там далеко не вся информация об ошибке, и читать её не удобно.
Поверьте, вы не первый. Мы всё это уже давно испытали, когда робко запускали вин 3.11 в досе, потом когда перезодили с доса на вин95, потом когда переходили с вин9х на вин2к+. Потом представьте какой у нас всех был шок, когда появилась ХП. Некоторые так испугались что случайно перешли на Висту. Семерка тоже что-то не сразу зашла. Ну а потом 8, 8.1, 10 мы покатились понаклонной
Странно, всегда думал, что жто наивсышый челендж для инженера. Что-то сродни «подковать блоху». На ферарри конечно после этого не уедешь, но ограниченные условия всегда заставляют блеснуть мыслью и необычным подходом.
«Всегда определяйте по ИП на каком языке говорит пользователь, ведь все люди всегда сидят дома и никто никогда никуда не ездит. А заголовок content-language вообще придумали недальновидные люди, ведь его никогда не настраивают и ни один браузер не предлагает его настроить.»