3

効率的な理由から (非常に小さいですが)、if 条件ブロック内で変数を宣言して割り当てたいと思います。

つまり言う代わりに

if(a != 0 && a->b >= 10){
    int c = a->b
    ...
}

そもそも int c を代入して言いたい

if(a != 0 && (int c = a->b) >= 10){
    ...
}

それを行う最も簡単な方法(私にとって)では、コンパイルエラーが発生します。C ++でこれを行うことが可能か不可能かを誰かが知っていますか?

4

4 に答える 4

4
if(a != 0) {
    int c = a->b;

    if (c >= 10) {
        //using c here
    }

    // common cleanup here
}
于 2012-11-24T23:45:07.943 に答える
1

なぜこれが何かを最適化すると思いますか?

条件内で変数を宣言および初期化することが許可されていると仮定しても (コンパイラーは評価可能なものを必要としており、宣言は何も返さないため、C++ ではこれは不可能です)、これは条件が評価されるたびに行われます。 (スニペットの場合のように、それを短絡しない限り)とにかく何も変わりません.どこにいても、変数を宣言して初期化しています.

于 2012-11-24T23:40:41.720 に答える
0

最初の状態であればうまくいきます。ただし、この場合、比較は割り当てに先行するため、必要なものは得られません

int a = 3;
int x = 0;
if ( bool b = a > 5 && x < 2) {
printf("%d",b);
}
于 2012-11-24T23:48:53.297 に答える
0
int c = (a == 0 ? 0 : a->b);
if(a != 0 && c >= 10){

    ...
}

a->b複数回の使用を避けたい場合。

于 2012-11-25T00:45:08.977 に答える