作者FRAXIS (喔喔)
看板C_and_CPP
標題Re: [心得] 你所不知道的C語言 - 小測驗
時間Sun Jun 7 08:08:53 2009
※ 引述《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