C++ if条件语句中的变量赋值

C++ if条件语句中的变量赋值,c++,C++,我见过一些在if条件下执行变量赋值的代码,例如: if((data->symStem = sym.isStem())==TRUE) //if condition { // do something } 据我所知,在上面的if条件中,sym.isStem首先分配给data->symStem,然后计算sym.isStem或data->system的相等条件。如果有什么问题,请纠正我 我不知道是否有任何特别的理由这样做,除了代码更紧凑 不,没有理由这样做,除了用一行对两行来写。不,没有

我见过一些在if条件下执行变量赋值的代码,例如:

if((data->symStem = sym.isStem())==TRUE)  //if condition
{
   // do something
}
据我所知,在上面的if条件中,sym.isStem首先分配给data->symStem,然后计算sym.isStem或data->system的相等条件。如果有什么问题,请纠正我


我不知道是否有任何特别的理由这样做,除了代码更紧凑

不,没有理由这样做,除了用一行对两行来写。

不,没有理由这样做,除了用一行对两行来写。

作业通常按照以下方式执行

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

原因是允许链接,如您的示例中所示。实际上,除了保存一行代码之外,没有什么别的了。

赋值通常按照以下方式实现:

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

原因是允许链接,如您的示例中所示。实际上,除了保存一行代码之外,没有更多的东西了。

在C++17中,这会有一定的变化-现在不仅允许您分配变量,还允许您在if条件下创建和初始化变量,它被称为带有初始值设定项的if语句:

if (int a = foo(); a != 0) {
//...
}
这有一个好处,即能够引入作用域变量,而不必在其周围放置一组新的人工大括号,就像在C++17之前必须做的那样

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

在C++17中,这得到了某种扭曲-现在不仅允许您分配变量,还允许您在if条件中创建和初始化变量,该条件称为带有初始值设定项的if语句:

if (int a = foo(); a != 0) {
//...
}
这有一个好处,即能够引入作用域变量,而不必在其周围放置一组新的人工大括号,就像在C++17之前必须做的那样

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

你说得对。在这样一个简单的if语句中没有很好的理由这样做。在更复杂的情况下,它可以简化涉及if。。。否则如果。。。梯形图,仅在某些情况下才应进行此类分配。我知道,那是很多手工操作。一个恰当的例子在评论中是不可读的。你对它的意思是正确的。在这样一个简单的if语句中没有很好的理由这样做。在更复杂的情况下,它可以简化涉及if。。。否则如果。。。梯形图,仅在某些情况下才应进行此类分配。我知道,那是很多手工操作。一个恰当的例子在评论中是不可读的。谢谢你的回答!谢谢你的回答!