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 ) statement
             do statement while ( 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?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage