Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

В чем разница цикла/условия с фигурными скобками без?

#cpp #циклы #предложения


int num = 5;

for(int i = 0; i < num; i++)
{
    cout << i; 
}

for(int i = 0; i < num; i++)
    cout << i;

    


Ответы

Ответ 1



Нет никакой разницы. Согласно стандарту C++ (6.5 Iteration statements) 2 The substatement in an iteration-statement implicitly defines a block scope (3.3) which is entered and exited each time through the loop. If the substatement in an iteration-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original statement. [ Example: while (--x >= 0) int i; can be equivalently rewritten as while (--x >= 0) { int i; } То есть одиночное предложение в for-предложении рассматривается как будто бы оно является составным предложением, то есть имеет блочную область определения. Однако в C эти предложения из примера из стандарта C++ не эквивалентны. В C объявление не является предложением. Поэтому в C вы не можете записать while (--x >= 0) int i; Компилятор выдаст сообщение об ошибке, так как. int i; не является предложением. Это объявление. Но вы можете записать while (--x >= 0) { int i; } так как объявления можно помещать в кодовый блок. В этом состоит одно из различий C++ и C. Еще один наглядный пример того, как это различие сказывается на программах, написанных на C++ и C, указан в этой теме на моем персональном форуме.

Ответ 2



Если не использовать фигурные скобки для отделения блока можно получить, ошибку при добавлении операторов int i = 6; while(i--) do_some(i); do_some_to(i); //вызов только после выполнения цикла, а не в цикле как, возможно, преполагалось Кроме того блоком можно управлять областью видимости переменной int i = 6; while(i--){ const auto tmp_var = do_some(i); do_some_to(tmp_var); } Общая рекомендация, для сокращения ошибок и читабельности кода всегда использовать {}. Избегать конструкций в одну строку вида: for(int = 0;i<10; i++) do_some(i);

Ответ 3



Занимает 4 строчки: for(int i = 0; i < num; i++) { cout << i; } Занимает одну строчку: for(int i = 0; i < num; i++) cout << i; Я, обычно, не слушаю всякие рекомендации, что пиши обязательно фигурные скобки. Читабельность программного кода возрастает, если записано в одну строчку. Рекомендую 2-й вариант!

Ответ 4



Разницы нет, а скобки обсуждаются в другой теме: Объясните мне пожалуйста, зачем нужно всегда ставить { и } И мой ответ там.

Комментариев нет:

Отправить комментарий