如果条件语句中的变量赋值

时间:2019-02-13 19:16:17

标签: c++

我已经看到一些在if条件下执行变量分配的代码,例如:

if((data->symStem = sym.isStem())==TRUE)  //if condition
{
   // do something
}

据我了解,在上述if条件中,首先将sym.isStem()分配给data->symStem,然后评估相等条件(对于sym.isStem()data->sysStem) 。如果出现问题,请纠正我。

我想知道是否有任何特殊原因,除了代码更紧凑。

3 个答案:

答案 0 :(得分:3)

不,除了写1行还是2行外,没有其他理由。

答案 1 :(得分:1)

在C ++ 17中,这有一定的曲折-现在不仅可以分配变量,还可以在if条件下创建和初始化变量(如果带初始化器的语句调用):

if (int a = foo(); a != 0) {
//...
}

这样做的好处是,可以引入范围变量,而不必像在C ++ 17之前那样在其周围放置新的人造花括号

{
int a = foo();
if (a != 0) {
//...
}
}

答案 2 :(得分:0)

分配通常实现为

struct foo {
    foo& operator=(const foo& other) {
        // do the assignment
        return *this;
    }
};

,原因是像您的示例一样允许链接。实际上,除了保存一行代码外,没有什么其他功能了。