[問題] 關於三元運算子

作者: spong (請輸入ID)   2020-04-21 18:38:17
今天翻書突然看到c++條件運算子的問題
像c = a > b ? a : b 我可以理解
但當我翻到下一頁,看到以下程式碼
int main(void)
{
const char x[2][20] = {"Jason ","at your service\n"};
const char *y = "Quillstone";
for(int i = 0;i<3;i++)
{
cout << ((i<2)? !i ? x[i]:y:x[1]);
}
return 0;
}
我完全不了解 cout << ((i<2)? !i ? x[i]:y:x[1])這行的運作規則
請問要怎麼解釋那段程式呢??
作者: bibo9901 (function(){})()   2020-04-21 18:44:00
加上正確括號應該是這樣 ((i<2) ? (!i?x[i]:y) : x[1])寫這種code的人應該拖出來打...
作者: ko27tye (好滋好滋)   2020-04-21 18:49:00
括號加好就可以啦 不加還這樣寫真的搞死人
作者: nh60211as   2020-04-21 18:54:00
??!??!!!?
作者: loveme00835 (髮箍)   2020-04-21 19:23:00
看不懂就嫌 code 概念嗎 xD簡單給一個提示: 通常遇到巢狀的 ?: 時, 會是擺在冒號 (:) 的右手邊做展開, 像是 a ? b : c ? d : e,這種結構才是必要的, 而且可以排版變成 switch 的長相, 寫成 a ? b ? c : d : e 這種形式基本上就是條件沒好好畫簡的結果試著化簡看看改成上面說的形式你會比較好理解, 其他形式根本上就是誤用
作者: chuegou (chuegou)   2020-04-21 19:58:00
我不懂樓上舉例 必要性是指?
作者: loveme00835 (髮箍)   2020-04-21 20:12:00
以這個例子, i < 2 跟 !i 的值域重疊了, 同樣的情況也會發生在寫 if-else, 變成會有很深的巢狀結構
作者: chuegou (chuegou)   2020-04-21 20:27:00
所以是在這個case 巢狀if比較不好的意思?
作者: eye5002003 (下一夜)   2020-04-21 20:59:00
編譯器最佳化之後還是一樣啊,好好的補上括號吧
作者: oToToT (屁孩)   2020-04-22 03:02:00
問題就只是為什麼不加括號而已吧,畢竟沒多少人喜歡背各種運算順序
作者: jack82822005 (小郭郭)   2020-04-22 03:40:00
這就算沒加括號也只有一種解法吧?不懂難在哪 = =
作者: kitehero (噁Python仄Py狼)   2020-04-22 09:26:00
寫短碼又不補括號真的很難讀
作者: ggBird (ggBird)   2020-04-22 11:30:00
花時間看這種code,我還不如去幹茶妹
作者: spong (請輸入ID)   2020-04-23 14:41:00
感謝各位神人的意見,小的非常感謝,(請收下我的膝蓋)
作者: MOONRAKER (㊣牛鶴鰻毛人)   2020-04-23 17:01:00
不懂難在哪嗎 那最好希望你的同事也跟你一樣不懂自己玩沒人看就算了 在團隊中寫這種code就是整人
作者: kobe8112 (小B)   2020-04-23 19:02:00
我也不懂怎麼會不懂別人覺得難在哪,就算你是億中出一的天才,學任何事物都一蹴可幾,明白不是每個人理解能力都相同這種事,不就跟尿尿要脫褲子一樣是常識嗎?或是拉開拉鍊
作者: mick90207 (阿公)   2020-04-27 12:49:00
加括號就可以方便大家解決的事情....
作者: richard88502 (RichardChi)   2020-05-01 12:23:00
我以為大型程式的宗旨就是簡單閱讀好維護欸XD

Links booklink

Contact Us: admin [ a t ] ucptt.com