c ++这里的语法是什么?

时间:2012-04-20 12:01:17

标签: c++ visual-c++

检查可变量值然后在相同条件下设置varable的正确语法是什么,同时检查新set varables 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 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

如果&&评估为零,则逻辑AND this->somevar运算符会短路,这意味着 if 表达式的其余部分将无法在该情况下进行评估

答案 2 :(得分:2)

逗号之后的表达式不是必需的。此外,还有一件事缺失,括号围绕着作业:

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

如果没有括号,您最终可能会将this->newvar设置为布尔表达式的值 this->GetNewVar(this->somevar),this->newvar > 0,它将被计算为一个布尔结果(true / false,反过来,当转换为this->newvar类型时,它可能会转换为0或1或-1,具体取决于编译器)

答案 3 :(得分: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为true才会运行。为了便于阅读,你应该在if条件之外运行exp1到exp3。