Потому что в них смысла нет если сторонних эффектов нет
а это теперь повод какому-то коду вести себя непредсказуемо?
в поведении бесконечных циклов без побочных эффектов нет ничего неопределенного самого по себе
В плюсах есть. while(1); компилятор может просто удалить
может обязан ли?
Вы путаете с while (false)
while(true) он тоже может выкинуть, если нет побочных эффектов в цикле, ибо это UB.
As part of the C++ forward progress guarantee, the behavior is undefined if a loop that has no observable behavior (does not make calls to I/O functions, access volatile objects, or perform atomic or synchronization operations) does not terminate. Compilers are permitted to remove such loops.
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
предлагаю читать стандарт, а не cppref
Предлагаю смотреть ассемблерный выхлоп компиляторов. https://godbolt.org/z/eGbcTKP3e
Четко видно, что clang выкидывает цикл. gcc и msvc оставляют.
Но вообще, если в последнем стандарте ситуация изменилась, то я только за, потому что бесконечные циклы - это удобно. Но на сегодняшний день они могут быть выкинуты, и ничего тут не поделаешь.
quality of implementation аргументы в вопросах UB?
вы точно с тем человеком спорите?
Я не капли не сомневаюсь, что вы в вопросе стандарта намного компетентнее меня) Тем более, что стандарты после 11 я даже не читал, ибо мне не светит их пропихнуть на работе в ближайшие лет 5. Но я четко помню, что бесконечный цикл без побочных эффектов был UB, и его можно было выкидывать. И, собственно, если это действительно происходит в одном из трех мастодонтов-компиляторов, то придется с этим жить.
не, я не имел в виду, что я компетентнее мой тезис, что бесконечный цикл это не UB, а не то, что он никогда не будет оптимизирован (optimized out) или всегда будет оптимизирован
а чем заменялся бесконечный цикл без эффектов при выкидывании? здравый смысл говорит что это должна быть инструкция для остановки деятельности цпу.
Что значит "никогда не будет оптимизирован"?
Хз, undefined behavior же) Как видно из моей ссылки выше - ничем.
уточнил сообщение
Обсуждают сегодня