2

检查变量值然后在相同条件下设置变量同时检查新设置变量 var 的正确语法是什么,全部在一个 if 语句中?

所以基本上像

if(this->somevar > 0 && this->newvar = this->GetNewVar(this->somevar),this->newvar > 0)

我知道这不是正确的语法,或者至少它对我不起作用,因此这个话题,我以它为例,所以如果this->somevar是 null 或 0,我不希望它执行下一个条件,即&& this->newvar = this->GetNewVar(this->somevar,this->newvar而是跳过该语句并忽略该部分。

像这样的东西的正确语法是什么?

4

4 回答 4

4

&&是具有短路评估的运算符,如果左侧部分为真,则不执行右侧部分。但是你为什么不简单地写:

if(this->somevar > 0)
{
  this->newvar = this->GetNewVar(this->somevar);
  if (this->newvar > 0)
  {
    ...

这肯定会让事情变得更清楚......

于 2012-04-20T12:07:53.980 回答
3

如果计算结果为零,则逻辑 AND&&运算符短路,这意味着在这种情况下不会计算ifthis->somevar表达式的其余部分

于 2012-04-20T12:03:10.733 回答
2

逗号后的表达式不是必需的。此外,还缺少一件事,括号周围的作业:

if(this->somevar > 0 && (this->newvar = this->GetNewVar(this->somevar)) > 0)

如果没有括号,您最终可能会设置this->newvar为 boolean expression 的值,该值 this->GetNewVar(this->somevar),this->newvar > 0将被评估为布尔结果(true/false 反过来,根据编译器,转换时可能会转换为 0 或 1 或 -1的类型this->newvar)。

于 2012-04-20T12:08:06.103 回答
0

我认为只有逗号后的位被评估为 if 条件。逗号左边的表达式被忽略。

int main() {
        if( false, true) { cout << " got to if( false, true ) "; }
        if ( true, false ) { cout << "got to if( true, false ) "; }
}

要回答您的问题,您可以在逗号左侧放置任何内容并执行您喜欢的任何操作,只要您要评估的表达式是列表中的最后一个表达式。

所以 if ( exp1, exp2, exp3 , exp4 ) dowhatever(); 仅在 exp4 为真时运行。为了可读性,您真的应该在 if 条件之外运行 exp1 到 exp3。

于 2012-04-20T12:15:00.947 回答