和&运营商?

编辑:我现在的主要问题是为什么这两个运算符需要重载使用&&和|| 运营商。 短路操作人员不会采用这些物体的真值还是假值进行比较? 在何处使用&&和|| 运营商是| 和&使用?

我正在阅读完整的参考文献C#,对于|我很困惑 和&运营商。 我习惯于他们是比较两个整数比特的按位运算符,但它们被解释为原始逻辑运算符,并且&&和|| 是当声明肯定会成为一定值时,停止测试值的短路版本。

这是否意味着这两个操作符有多个用途,或者C#确实在幕后类型转换中执行了一些操作?

此外,使用&&和||时 一个班级的操作员,为什么| 和&必须超载? 为什么不能只为一个类的真假值超载?


| &运算符是对整数和布尔运算符上的渴望逻辑运算符的按位运算。 ||&&运算符是布尔运算符上的懒惰逻辑运算符。

此外,使用&&和||时 一个班级的操作员,为什么| 和&必须超载? 为什么不能只为一个类的真假值超载?

你有一个Foo类,它有一个重载的true和false操作符。 你希望Foo上的&&操作员带两个Foos并返回第三个。 解释你打算如何只用真假操作符来做到这一点。

为什么我们需要C#中渴望的布尔逻辑运算符?

如果您想评估两个布尔返回值的副作用并对它们应用逻辑操作。

我不明白,&&和|| 运营商,我想要一个布尔返回,而不是另一种类型。

那么你不需要超载任何东西。 只需将一个隐式转换运算符从Foo写入到bool中,并且您可以使用|,||,&和&来表达您心中的内容。

仅仅因为你不想拥有&&或|| 返回bool以外的东西并不意味着没有人这样做。 假设不是Foo,你希望写一个三值逻辑运算符,其值可以是True,False或者都不是。 你可以定义&和| 和&&和|| 真,假和非两者的运营商。 显然你不希望操作员返回布尔值; 你希望他们返回True,False或者都不是。

我不明白的是| &运营商必须处理&&和|| 运营商。

他们是完全相同的运营商 。 唯一的区别是懒惰的不会评估第二个操作数,如果这样做是不必要的。

为什么必须| 并被重载以使用|| 和&&虽然?

看到前面的问题和答案。

| 和&运营商需要两个操作数。

是的,他们这样做。 &&和||也是如此 运营商。


我没想到能够在网上找到答案,否则我就不会在这里问过,但我确实设法做到了,这就是我所拥有的:

从http://msdn.microsoft.com/en-us/library/aa691312(v=vs.71).aspx它说: The operation x && y is evaluated as T.false(x) ? x : T.&(x, y) The operation x && y is evaluated as T.false(x) ? x : T.&(x, y)

换句话说,它评估x的真或假,如果x为假,则返回x,否则返回x & y 。 这将解释为什么这两个| 和&运算符需要重载&&和||,但它不能解释为什么它不被评估为:

T.false(x) ? x : T.false(y) ? y : x

如果有人可以解释为什么比较y和x,我将不胜感激。

链接地址: http://www.djcxy.com/p/9889.html

上一篇: and & operators?

下一篇: Reference: Comparing PHP's print and echo