gpt4 book ai didi

c# - 为什么 C# && 和 ||运算符(operator)按照他们的方式工作?

转载 作者:太空狗 更新时间:2023-10-29 22:24:22 26 4
gpt4 key购买 nike

这是一个 tl;dr

我有 C++ 背景。 && 假设检查左侧是否为真,右侧是否为真。这与 & 有什么关系?为什么在 && 逻辑中使用它?


我听不懂http://msdn.microsoft.com/en-us/library/aa691312%28v=vs.71%29.aspx并问了一个问题。我花了很长时间才理解并接受这个答案。我不得不做很多跟进阅读 How does operator overloading of true and false work?

The operation x && y is evaluated as T.false(x) ? x : T.&(x, y)

它到底为什么要这样做?如果 false 重载返回 true 并且 true 运算符返回 true 则根本不会评估 y 。 WTF!!!!

我还是不明白。因为这对我来说太奇怪了,所以我花了一段时间才理解另一个问题的答案。在 C# 中,v = 1 && 2; 不起作用,因为您不能对整数执行 &&。在 C 中,这返回 true(这里是代码/示例 http://codepad.org/9iCaqzQ2)。如果我们按照上面的操作规则,我们会这样做

(使用 1 && 2)

  • Int.False(1) 为假
  • 1 & 2 (== 0)
  • Int.True(0) (== false)

这会给您带来错误的结果。

那么... C# 以其方式执行 &&(和 ||)运算符的原因是什么。

最佳答案

&& 被定义为短路运算符;如果第一个操作数的计算结果为假,则要求在那里短路并且不计算右侧。您期望它还能做什么?这允许像 if(arg != null && arg.Foo) {...} 等检查

你的问题基本上是说“如果我写了一个不正确的真/假运算符实现,就会发生坏事”......所以;不要那样做!要么根本不写真/假运算符,要么你写;做对...

还有&|短路

关于c# - 为什么 C# && 和 ||运算符(operator)按照他们的方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com