检查可变量值然后在相同条件下设置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
条件,但是跳过该语句并忽略该部分。
这样的东西的正确语法是什么?
答案 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。