'if'表达式后续变量声明

时间:2011-10-21 03:09:29

标签: c++ if-statement variable-declaration

这是C++, variable declaration in 'if' expression

的后续行动
if( int x = 3 && true && 12 > 11 )
    x = 1;

规则(据我所知)是:

  1. 每个表达式只能声明一个变量
  2. 变量声明必须首先出现在表达式
  3. 必须使用复制初始化语法 直接初始化语法
  4. 不能在声明周围加上括号
  5. 1和2根据this answer有意义,但我看不出3和4的任何原因。其他人可以吗?

1 个答案:

答案 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的“表达式或声明”规则。