这是C++, variable declaration in 'if' expression
的后续行动if( int x = 3 && true && 12 > 11 )
x = 1;
规则(据我所知)是:
1和2根据this answer有意义,但我看不出3和4的任何原因。其他人可以吗?
答案 0 :(得分:1)
C ++ 03标准将选择语句定义为:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
switch ( condituion ) statement
condition:
expression
type-specifier-seq attribute-specifieropt declarator = initializer-clause
C ++ 11还增加了以下规则:
condition:
type-specifier-seq attribute-specifieropt declarator braced-init-list
一般来说,这意味着您可能放入条件的声明实际上只是保留条件表达式的值以供进一步使用,即对于以下代码:
if (int x = 3 && true && 12 > 11) {
// x == 1 here...
x
评估为:3 && true && (12 > 11)
。
回到你的问题:
3)在这种情况下,C ++ 11允许你现在使用直接初始化(使用大括号初始化器),例如:
if (int x { 3 && true && 12 > 11 }) {
4)以下内容:if ((int x = 1) && true)
根据上面的定义没有意义,因为它不符合condition
的“表达式或声明”规则。