在if语句中使用逗号运算符

时间:2012-07-21 12:36:00

标签: c++ if-statement comma

我尝试了以下内容:

if(int i=6+4==10)
    cout << "works!" << i;

if(int i=6+4,i==10)
    cout << "doesn't even compile" << i;

第一个工作正常,而第二个不编译。这是为什么?

编辑:现在我知道第一个可能无法正常工作。 if范围内的i值将为1,而不是10.(正如本问题的其中一条评论所指出的那样)。

那么有没有一种方法可以在for(int i=0;i<10;i++)之类的同时初始化和使用if语句中的变量?这样你就可以产生类似if((int i=6+4)==10)(不会编译)的东西,其中if范围内的I值为10? 我知道你可以在if语句之前声明并初始化我,但有没有办法在语句本身内执行此操作?

为了让您了解我认为这有用的原因。

 if(int v1=someObject1.getValue(), int v2=someObject2.getValue(), v1!=v2)
    {
        //v1 and v2 are visible in this scope 
        //and can be used for further calculation without the need to call
        //someObject1.getValue() und someObject2.getValue() again.
    }
    //if v1==v2 there is nothing to be done which is why v1 und v2
    //only need to be visible in the scope of the if.

4 个答案:

答案 0 :(得分:5)

用作初始化表达式的表达式必须是赋值表达式,因此如果要使用逗号运算符,则必须为初始值设定项括号。

E.g。 (并不是因为6 + 4没有副作用而且你的值被丢弃而i == 10在其自己的初始化程序中使用未初始化的i值。

if (int i = (6 + 4, i == 10)) // behaviour is undefined

你真的有这样的意思吗?

int i = 6 + 4;
if (i == 10)

当使用声明新变量的if形式时,检查的条件始终是转换为bool的初始化变量的值。如果您希望条件是涉及新变量的表达式,则必须在if语句之前声明该变量,并使用您要测试的表达式作为条件。

E.g。

int i;
if ((i = 6 + 4) == 10)

答案 1 :(得分:3)

我非常怀疑示例是否正常做任何有用的事情。它所做的就是以复杂的方式评估为“真实”。

但第二个不编译的原因是它被解释为两个声明:int i = 6+4; int i==10int i==10无效,因为它是一个相等运算符,而不是赋值。

答案 2 :(得分:0)

从C ++ 17开始,您尝试做is finally possible

if (int i=6+4; i==10)
    cout << "works, and i is " << i << endl;

请注意使用;代替,来分隔声明和实际情况。

答案 3 :(得分:-1)

有不同的选择,因为你想要的不能做(你不能将逗号运算符与声明混合)。例如,您可以在if条件之外声明变量:

int i = 6+4;
if ( i == 10 ) ...

或者您可以将i的值更改为0而不是10,并在i块中重新计算else

if ( int i = (6+4)-10 ) ; else {
   i += 10;
   // ...
}

更简单一点,根本不要声明变量,因为你知道循环中的值:

if ( (6+4)==10 ) {
   int i = 10;
   // ...
}

当然,除非i不是10,否则您需要{{1}}的值,在这种情况下,第二个选项是最合适的。