看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《ibmibmibm (殺.人.鬼)》之銘言: : ※ [本文轉錄自 Soft_Job 看板] 不只comma opeartor,conditional operator也是一樣,而且應該比較常用。 假設有兩個整數 a, b,要找出兩者之間的最大值,用?:可以很簡單寫成這樣 max = (a > b) ? a : b; 但是如果是要把兩者之間的最大值變成某個特定數字(假設是0),用?:的話 ((a > b) ? a : b) = 0 ANSI C的編譯器會編譯錯誤(除非有extension) 所以只能改寫成稍微麻煩的形式 (a > b) ? (a = 0) : (b = 0); 但是如果現在不是要把最大值變成0,而是要變成1的話,這種寫法要改兩個地方。 因此有人就利用另外一個技巧,來解決lvalue的問題 (*((a > b) ? &a : &b)) = 0 只是變的很醜就是了.. C++把lvalue的限制放寬之後,會增加寫程式的便利性。 lvalue還可以細分出modifiable lvalue,不知道有沒有高手懂得中間的區別介紹一下.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.162.51
Ebergies:這樣如何? r= 0; a>b ? a= r: b= r; 06/07 08:53
ibmibmibm:還有一個「cast operator」也是只傳回rvalue 06/07 08:59