1樓:暮無井見鈴
關於問題 1 :
題主的理解基本是正確的,不過整個表示式的型別是 E1 與 E2 的共用型別。
它對應的標準寫法更像(以 clang 版本為例,暫未檢查 noexcept 與 SFINAE 性質)
// E1 ?: E2 --> elvis_opr(E1, E2);
template
class U>constexpr auto elvis_opr(T &&t,U &&u)E1 就像函式引數一樣只求值一次,但轉換可能會進行兩次。 其中三元 ?: 的第一運算元是按語境 bool 轉換,後兩個運算元是轉換到共用型別,所以不能做到只轉換一次。 關於問題 2 : 這個擴充套件在 gcc 與 clang 中表現有別,原因不明。 在 E1 ?: E2 中,如果 E1 是類型別右值,則 gcc 拒絕編譯。但 clang 通過編譯,並可能 forward 兩次。 如果 E1 有標量型別,則無論左值還是右值均為 gcc 所接受。 參考:https:// wandbox.org/permlink/FE LBqqZD2PfDRKOj 2樓:機犬 首先需要在常量/右值情況下使用的方法不加 const 都是耍流氓,其次 (S{} ? S{} : 1) 能用就好,不要依賴編譯器擴充套件,非標準的表示式支援起來肯定不會太積極。 追遠 J 先糾正題主的乙個小錯誤。跟 同屬一家的運算子應該是 而非 這個問題還挺有意思 對問題本身的回答其實並不複雜 原則上講,and,or,not針對布林值 True False 進行運算,就是字面上的與或非的功能,確實可以稱之為邏輯運算子 類似C C 中的 而 則對應C C 中所謂的 按位運算子... 快樂領讀 1 與運算子 與運算子用符號 表示,其使用規律如下 兩個運算元中位都為1,結果才為1,否則結果為0,例如下面的程式段。public class data13 執行結果 a 和b 與的結果是 128 下面分析這個程式 a 的值是129,轉換成二進位制就是10000001,而 b 的值是128... Kittyhawk 先從myob 1說起,假設myob屬於Myob類,這裡我們過載了 mul class Myob def mul self val print mul 過載了 mul 後我們就可以順利實現myob 1,結果是列印出 mul 但如果把兩者換一下位,1 myob,就會報錯了。這是因為1...python的邏輯運算子 and,or,not 和普通的邏輯運算子( )有何區別?
Java中如何對變數使用與或運算子。?
python如何實現左側的運算子過載?