LINUX.ORG.RU

4 вопроса про C++ UB

 


2

3

ничего не знаю ни о С++ или даже о С, но из любопытства возникли вопросы. может быть кому-то будет не трудно кратко ответить.

1. вот тут говорят что в С++ некое UB. если стандарт не определяет поведение для какого-то случая, то он явно это делает? т.е. там сказано типа «when X then Y must happens, in any other case - UB»? или же UB — это просто всё то, что не покрыто стандартом («а вот об этом там ничего не сказано»)?

2. регламентирует ли стандарт scope UB? или как это сказать, рамки последствий от инструкций, результат которых не определен? к примеру, в программе используется конструкция с UB, в результате чего обнулилась совсем не относящаяся к вопросу память и арифметика стала работать неправильно и т.д. гипотетический компилятор, который такую программу скомпилировал - он формально соответствовал Стандарту С++ ? или же стандарт строго очерчивает область в которой могут наблюдаться произвольный эффект?

3. что сам стандарт говорит о компилиуемости кода с неопределенным поведением? предписывает ли стандарт компилятору (претендующему на полное соответствие стандарту) отвергать код, последствия которого (даже если они имеют строго очерченные рамки) не определены стандартом?

4. возможно ли теоретически построить такой компилятор, который бы допускал инструкции с UB, но гарантировал бы отсутствие вреда от них через пресечение использования их результатов. пример: в точке A вы пишете конструкцию с у которой часть эффекта определена, а часть - UB, и всё работает нормально. но где-то далее вы добавили код (точка B) для определения результата которого необходимо использовать ранее полученный эффект из A (который UB). и вот уже такую компилятор отвергает сразу (либо останавливает ее в рантайме). ведутся ли такие разработки?

Ответ на: комментарий от vcerloman

Ты и не смог.

Единственным доказательством того, что ты можешь, могла быть ссылка от тебя.

Ссылки нет. Ты не смог.

И это вообще не зависит от того, что ты хотел бы взамен.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Ты и не смог.

Сколько ты готов на это поставить?

И это вообще не зависит от того, что ты хотел бы взамен.

Опять юлишь, балаболка. Нет, это не в замен. Это как пруф, что твои потуги хоть чего-то стоят. Уверен в том, что «и не смог» - значит никаких проблем нет.

А вот если не уверен, то тут начинаются мазы. У меня нет никаких возможностей съехать. А вот у тебя есть. Но даже имея это возможно - ты ссышься.

Кстати, почему ты не используешь make?

vcerloman ()
Ответ на: комментарий от vcerloman

ID: 157152 Nick: vcerloman Дата регистрации: 12.12.2017 11:24:00 Последнее посещение: 14.02.2018 19:24:10 Статус: анонимный

Джанго фуллстек макака Статистика Первый комментарий: 26.12.2017 10:55:22 Последний комментарий: 14.02.2018 10:46:43 Число комментариев: 404

лол )))

anonymous ()

1. ub - это что угодно. программа может упасть, может выполнить неправильные инструкции, может выполнить правильные инструкции над неправильными данными. вообще всё, что угодно. например чтение из неинициализированной памяти - это ub.

2. нет

3. ничего не говорит. ub возникает во время выполнения, а не во время компиляции.

4. нет, см 3. но в рантайме ub можно отследить: man valgrind.

anonymous ()