5

如果我有以下布尔:

bool success = true;

以下三行代码是否会成功存储相同的结果:

1 - success &= SomeFunctionReturningABool();

2 - success = success & SomeFunctionReturningABool();

3 - success = success && SomeFunctionReturningABool();

我发现一篇文章指出 1 是 2 的快捷方式 - 但 2 与 3 相同,或者我的应用程序会在执行此行时爆炸...

4

4 回答 4

8

对于布尔类型,single&评估所有操作数,而 double&&仅在必要时评估(即,如果第一个操作数为假,则不会费心评估第二个操作数),也称为“短路”评估。

来源: 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 不一样,好像success是假的,SomeFunctionReturningABool() 不会被调用——这不是你想要的。

于 2011-04-04T10:45:32.077 回答
0

你说的对。1是2的快捷方式。'&'和'&&'的区别你可以在这里找到msdn

'&' 是逻辑与,而 '&&' 是条件与

于 2011-04-04T10:52:02.937 回答
-1

选项 2 和 3 是等效的,并且&=确实如此。

您应该知道,如果第一次调用失败,则后续调用可能不会发生:例如,

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

它首先评估x != null- 如果它是错误的,那么第二部分将不会被执行。这同样适用于此。

(嗯,我想知道这是否仅适用于 && 而不是 &...)

于 2011-04-04T10:44:42.587 回答