¿Por qué no puedes declarar una variable dentro de la porción de expresión de un bucle do while?
La siguiente sintaxis es válida:
while (int i = get_data())
{
}
Pero lo siguiente no es:
do
{
} while (int i = get_data());
Podemos ver por qué a través del borrador del estándarN4140
sección6.4:
1 [...]
condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list
2 Las reglas de condiciones se aplican tanto adeclaraciones de selección y alfor
ywhile
declaraciones (6.5). [...]
y sección6.5
1 Las declaraciones de iteración especifican bucles.
iteration-statement:while
( condition ) statementdo
statementwhile
( expression ) ;
En cambio, estás obligado a hacer algo feo como:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
¿Cuál es la razón de esto?