Почему вы не можете объявить переменную внутри части выражения цикла 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 ) statementdo
statementwhile
( expression ) ;
Вместо этого вы вынуждены делать что-то ужасное, например:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
В чем причина этого?