5

次のブール値がある場合:

bool success = true;

次の 3 行のコードは、同じ結果を正常に保存しますか?

1 - success &= SomeFunctionReturningABool();

2 - success = success & SomeFunctionReturningABool();

3 - success = success && SomeFunctionReturningABool();

1 は 2 のショートカットですが、2 は 3 と同じか、この行の実行時にアプリケーションが爆発するという記事を見つけました...

4

4 に答える 4

8

ブール型の場合、single&はすべてのオペランドを評価しますが、double&&は必要な場合にのみ評価します (つまり、最初のオペランドが false の場合、2 番目のオペランドを評価する必要はありません)。これは、「短絡」評価とも呼ばれます。

ソース: http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx

代入演算子に関しては、&=single と同じように機能し&ます。

于 2011-04-04T10:48:00.547 に答える
2

1 と 2 は同じであり、以下も同じです。

int value += 1;
int value = value + 1;

3 は同じではなく、successfalse であるかのように呼び出されSomeFunctionReturningABool() ません - これはあなたが望むものではありません。

于 2011-04-04T10:45:32.077 に答える
0

あなたが正しいです。1 は 2 へのショートカットです。'&' と '&&' の違いはこちらmsdnにあります。

「&」は論理 AND ですが、「&&」は条件付き AND です

于 2011-04-04T10:52:02.937 に答える
-1

オプション 2 と 3 は同等であり、&=まさにそれを行います。

最初の呼び出しが失敗した場合、後続の呼び出しが発生しない可能性があることを知っておく必要があります。たとえば、

if (x != null && x.Test() == true)

それは最初に評価されx != nullます - そしてそれが false の場合、2 番目の部分は実行されません。ここでも同じことが言えます。

(えっ、それは&&じゃなくて&&だけなのかな…)

于 2011-04-04T10:44:42.587 に答える