Warum können Sie eine Variable nicht innerhalb des Ausdrucksteils einer do while-Schleife deklarieren?
Die folgende Syntax ist gültig:
while (int i = get_data())
{
}
Aber das Folgende ist nicht:
do
{
} while (int i = get_data());
Wir können anhand des Normentwurfs sehen, warumN4140
Sektion 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 Die Regeln für Bedingungen gelten sowohl für Auswahlanweisungen und zumfor
undwhile
Anweisungen (6.5). [...]
und Abschnitt 6.5
1 Iterationsanweisungen geben die Schleife an.
iteration-statement:while
( condition ) statementdo
statementwhile
( expression ) ;
Instead, du bist gezwungen, etwas Hässliches zu tun:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
Was ist der Grund dafür?