Por que você não pode declarar uma variável dentro da parte da expressão de um loop do while?
A seguinte sintaxe é válida:
while (int i = get_data())
{
}
Mas o seguinte não é:
do
{
} while (int i = get_data());
Podemos ver por que, através do rascunho do padrãoN4140
seção6.4:
1 [...]
condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list
2 As regras de condições se aplicam tanto ainstruções de seleção e para ofor
ewhile
declarações (6.5). [...]
e seção6.5
1 As instruções de iteração especificam o loop.
iteration-statement:while
( condition ) statementdo
statementwhile
( expression ) ;
Em vez disso, você é forçado a fazer algo feio como:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
Qual é a justificativa para isso?