簡體   English   中英

C# - | 和&運營商?

[英]C# - | and & operators?

編輯:我現在的主要問題是為什么需要重載這兩個運算符才能使用&&和|| 運營商。 短路運營商不會采用對象的真值或假值並進行比較嗎? 在哪里使用&&和|| 運營商是| 和&使用?

我正在閱讀C#,完整的參考資料,我對|很困惑 和&運營商。 我習慣他們是比特運算符,比較兩個整數的位,但它們被解釋為原始邏輯運算符,&&和|| 是短語版本,當語句肯定是某個值時,它會停止測試值。

這是否意味着兩個運算符有多種用途,或者C#是否在幕后進行類型轉換?

此外,使用&&和||時 一個班級的運營商,為什么要這樣做 並且必須超載? 為什么不能只重載類的真值和假值?

| &運算符是對布爾運算符上的整數和急切邏輯運算符的按位運算。 || &&運算符是布爾運算符上的惰性邏輯運算符。

此外,使用&&和||時 一個班級的運營商,為什么要這樣做 並且必須超載? 為什么不能只重載類的真值和假值?

你有一個Foo類,它有一個重載的true和false運算符。 你希望Foo上的&&運算符取兩個Foos並返回第三個。 解釋你打算如何只使用真假運算符。

為什么我們需要在C#中使用熱切的布爾邏輯運算符?

如果您想評估兩個布爾返回值的副作用並對它們應用邏輯運算。

我不明白,用&&和|| 運營商,我想要一個bool返回,而不是另一種類型。

然后你不需要超載任何東西。 只需將一個隱式轉換運算符從Foo寫入bool,您就可以使用|,||,&和&&來表達您的內心。

只是因為不想要一個&&或|| 返回除bool之外的其他東西的運算符並不意味着沒有人這樣做。 假設你想要寫一個三值邏輯運算符而不是Foo,其值可以是True,False或Nither。 你可以定義&和| 和&&和|| 運營商是真的,假的,都不是。 顯然你不希望運營商返回bool; 你希望他們返回True,False或Neither。

我不明白的是什么 和&運算符與&&和||有關 運營商。

他們是完全相同的運營商 唯一的區別是,如果不這樣做,懶惰的那些不會評估第二個操作數。

為什么必須| 和&重載使用|| 和&&雖然?

請參閱上一個問題和答案。

| 和&運營商采取兩個操作數。

是的,他們這樣做。 &&和||也是如此 運營商。

我沒想到能夠在網上找到答案,否則我不會在這里問,但我確實設法了,這就是我所擁有的:

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被比較,我將不勝感激。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM