Другие языки программирования и технологии

for и while всегда обрабатывают формулы? С++

Если записи такие
1) for (i=0; i<100+10 ;i++)
2) for (i=0; i<y+x ;I++)
3) while (1-1)
4) while (x+y)
В каких случаях будет решаться примеры каждый раз, при повторе? для while я так понимаю всегда, а для for? будет ли он решать константы 100+10 для сравнения с i 110 раз? а с переменными?
Современные компиляторы С/C++ константные выражения вычисляют на этапе компиляции. Так что оптимизирующий компилятор вычислит 1-1, поймёт, что while(0) не будет выполнен и выбросит тело цикла из генерируемого выполняемого кода.

100+10 тоже будет вычислено на этапе компиляции и в программе будет стоять константа 110.

При использовании в выражении переменных ситуация сложнее: невозможно предсказать, насколько хорошо отработает оптимизатор. Но если ты используешь компилятор с открытым исходным кодом, то можешь взять исходники и самостоятельно разобраться, почему оптимизатор сработал именно так, а не иначе.

Сколько операций в 1 || y==1 || y==0 - для этого есть учебники языка. В которых чёрным по белому описывается семантика операций || и &&. Из которой однозначно следует, что будет не более одной проверки. А скорее всего, не будет ни одной: оптимизирующий компилятор вообще уберёт не нужное условие.
Саша X
Саша X
50 534
Лучший ответ
Дима Бутенко ОГРОМНОЕ СПАСИБО ЗА ПОДРОБНОСТИ, отмечу как лучший ответ
1. while (1-1) = while (0), т. е. не будет выполнено ни разу
2. if (1 || y==1 || y==0) будет всегда истина, ибо для ИЛИ достаточно одного значения "ИСТИНА "(1) и остальные условия проверяться не будут

Остальное вообще банально и мне лень писать истины прописные
Ви
Виталий
79 726
Дима Бутенко не поняли вопроса, когда компилятор поймёт, где можно оптимизировать?
Сколько процессор потратит времени на это? Константы например не меняются и по сути можно их решать 1 раз, а переменные нужно постоянно обновлять, но как распорядиться тут С++?
while (1-1) -тело цикла не выполнится ни разу.
while (x+y) - зависит от того, какими были x и y и что с ними делается теле цикла
"будет ли он решать константы 100+10 для сравнения с i 110 раз? а с переменными?" - константы не решаются: тело цикла выполнится 110 раз, если в нем не предусмотрен преждевременный выход из цикла
"for (i=0; i<y+x ;I++)" выполнится ни разу или бесконечно, в зависимости от x и y (I - это не i)
Дима Бутенко Мне не банальные уроки по С++ нужны, мне нужен ответ, КОГДА ПРОЦЕССОР ЭТО ОБРАБАТЫВАТЬ БУДЕТ??? 1-1 теоретически компилятор может сам решить в 0 и не компилить это... НО ДЕЛАЕТ ЛИ ОН ЭТО?
1) будет
3) ни разу
остальные о Х У зависит
Условие повторения цикла вычисляется на каждой итерации для всех типов циклов. А уж какие вычисления компилятор сумеет соптимизировать - вопрос отдельный.