我已经看到一些在if
条件下执行变量分配的代码,例如:
if((data->symStem = sym.isStem())==TRUE) //if condition
{
// do something
}
据我了解,在上述if条件中,首先将sym.isStem()
分配给data->symStem
,然后评估相等条件(对于sym.isStem()
或data->sysStem
) 。如果出现问题,请纠正我。
我想知道是否有任何特殊原因,除了代码更紧凑。
答案 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;
}
};
,原因是像您的示例一样允许链接。实际上,除了保存一行代码外,没有什么其他功能了。