Size: a a a

2020 August 13

m

magras in pro.cxx
Anatoly Tomilov
в вопросе выше — ответ, или я не прав?
У меня вполне валидный объект x.
источник

AT

Anatoly Tomilov in pro.cxx
но объектов std::byte никто не создавал
источник

m

magras in pro.cxx
Anatoly Tomilov
но объектов std::byte никто не создавал
Для char, unsigned char и byte в стандарте явно прописаны исключения.
источник

AP

Alexander Potapov in pro.cxx
Я вообще не понимаю, кто над кем издевается. Лучше ответьте, как люди код 40 лет писали с маллоком и проблем не было, а выходят 20 плюсы и внезапно весь код становится невалидным
источник

AT

Anatoly Tomilov in pro.cxx
надо сначала вызвать std::for_each(p, p + sizeof(x), [] (std::byte & b) { new ((void *)&b) std::byte; });, чтобы волосы были шелковистыми :)
источник

VK

Valentin Kornienko in pro.cxx
Alexander Potapov
Я вообще не понимаю, кто над кем издевается. Лучше ответьте, как люди код 40 лет писали с маллоком и проблем не было, а выходят 20 плюсы и внезапно весь код становится невалидным
Он им не был, видимо😁
источник

m

magras in pro.cxx
magras
А это не UB менять объект через указатель на std::byte / char?

int x = 42;
std::byte* p = reinterpret_cast<std::byte*>(&x);
std::fill(p, p + sizeof(x), 0);
Мне просто любопытно, имею ли я право создать массив int'ов и передать в условный void crypt(std::byte* data, unsigned size); не вызвав UB.
источник

AP

Alexander Potapov in pro.cxx
То есть 20 стандарт изменил предыдущие стандарты. Што?
источник

m

magras in pro.cxx
Alexander Potapov
То есть 20 стандарт изменил предыдущие стандарты. Што?
Это всегда было UB. В 20 перестало.
источник

AP

Alexander Potapov in pro.cxx
Кто-то жаловался на нерабочий код?
источник

AP

Alexander Potapov in pro.cxx
Опять магический компилятор под микроволновку код не генерил правильный?
источник

AT

Anatoly Tomilov in pro.cxx
Alexander Potapov
Кто-то жаловался на нерабочий код?
модели памяти не было даже ведь. Разработчики компиляторов додумывали "как оно должно быть", консенсусно приходили к правильным решениям, что у всех всё работало.
источник

AT

Anatoly Tomilov in pro.cxx
Это случайность
источник

m

magras in pro.cxx
Anatoly Tomilov
надо сначала вызвать std::for_each(p, p + sizeof(x), [] (std::byte & b) { new ((void *)&b) std::byte; });, чтобы волосы были шелковистыми :)
Это не создаст больше проблем чем было? Выйдет что по одному адресу будут сразу два живых объекта.
источник

AT

Anatoly Tomilov in pro.cxx
Есть антропный принцип, а есть C++-тропный принцип. Весь код C++ существует и в итоге работает до 20-го стандарта включительно, потому что разрабы компиляторов шли по единственно верному пути. Шаг в сторону и у всех  бы всё не работало и говорить бы было не о чем, нечего ругать. Не было бы кодовой базы, наработанной за эти десятилетия. Нам всем очень повезло.
источник

AP

Alexander Potapov in pro.cxx
Выходит так:
- У всех все работало
- Выходят 20 плюсы
- Ой ребят а у вас код нерабочий
- Но с 20 плюсов он снова рабочий
источник

m

magras in pro.cxx
Alexander Potapov
Выходит так:
- У всех все работало
- Выходят 20 плюсы
- Ой ребят а у вас код нерабочий
- Но с 20 плюсов он снова рабочий
Так в чем проблема? Стандарт привели к тому что было стандартом де факто.
источник

CD

Constantine Drozdov in pro.cxx
Alexander Potapov
Я вообще не понимаю, кто над кем издевается. Лучше ответьте, как люди код 40 лет писали с маллоком и проблем не было, а выходят 20 плюсы и внезапно весь код становится невалидным
Люди написали очень много невалидного по стандарту кода, который работает. В частности, зачем-то написано очень много кода с маллоком для интов
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
Есть антропный принцип, а есть C++-тропный принцип. Весь код C++ существует и в итоге работает до 20-го стандарта включительно, потому что разрабы компиляторов шли по единственно верному пути. Шаг в сторону и у всех  бы всё не работало и говорить бы было не о чем, нечего ругать. Не было бы кодовой базы, наработанной за эти десятилетия. Нам всем очень повезло.
На самом деле это дань совместимости с си, это и не должно работать
источник

ПК

Побитый Кирпич... in pro.cxx
Alexander Potapov
Я вообще не понимаю, кто над кем издевается. Лучше ответьте, как люди код 40 лет писали с маллоком и проблем не было, а выходят 20 плюсы и внезапно весь код становится невалидным
В С++ с малоком никто не пишет
источник