Почему вы не можете объявить переменную внутри части выражения цикла do while?

Следующий синтаксис действителен:

while (int i = get_data())
{
}

Но следующее не так:

do
{
} while (int i = get_data());

Мы можем видеть, почему через проект стандартаN4140 раздел6,4:

1 [...]

condition:
     expression
     attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
     attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

2 Правила условий применяются как кВыбор-заявление и кfor а такжеwhile заявления (6.5). [...]

и раздел6,5

1 Итерационные операторы определяют цикл.

      iteration-statement: 
             while ( condition ) statement
             do statement while ( expression ) ;

Вместо этого вы вынуждены делать что-то ужасное, например:

int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic

В чем причина этого?

Ответы на вопрос(6)

Ваш ответ на вопрос