以下语法有效:
while (int i = get_data())
{
}
Run Code Online (Sandbox Code Playgroud)
但以下不是:
do
{
} while (int i = get_data());
Run Code Online (Sandbox Code Playgroud)
我们可以通过标准草案N4140第6.4节了解原因:
1 [...]
condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list2条件规则既适用于选择陈述,也适用于
for和while陈述(6.5).[...]
和第6.5节
1迭代语句指定循环.
iteration-statement:while( condition ) statementdostatementwhile( expression ) ;
相反,你被迫做一些丑陋的事情:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
Run Code Online (Sandbox Code Playgroud)
这是什么理由?