2

変数の値をチェックしてから同じ条件で変数を設定し、新しいセットの変数の変数もすべて1つのifステートメントでチェックするための正しい構文は何ですか?

基本的には次のようなものです

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

私はそれが正しい構文ではないか、少なくとも私にとってはうまくいかないことを知っています、したがってトピック、私はそれを例として使用しています、それでthis->somevarnullまたは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&&演算子は短絡this->somevarされます。つまり、残りのif式はその状況では評価されません。

于 2012-04-20T12:03:10.733 に答える
2

カンマの後の式は必要ありません。また、足りないものが1つあります。それは、割り当てを囲む括弧です。

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

this->newvar括弧がないと、ブール式の値に 設定されてしまう可能性があります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がtrueの場合にのみ実行されます。読みやすさのために、if条件の外でexp1からexp3を実際に実行する必要があります。

于 2012-04-20T12:15:00.947 に答える