作者spong (請輸入ID)
看板C_and_CPP
標題[問題] 關於三元運算子
時間Tue Apr 21 18:38:17 2020
今天翻書突然看到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])這行的運作規則
請問要怎麼解釋那段程式呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.213.185.143 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1587465499.A.E93.html
→ bibo9901: 加上正確括號應該是這樣 ((i<2) ? (!i?x[i]:y) : x[1]) 04/21 18:44
推 bibo9901: 寫這種code的人應該拖出來打... 04/21 18:46
推 ko27tye: 括號加好就可以啦 不加還這樣寫真的搞死人 04/21 18:49
→ nh60211as: ??!??!!!? 04/21 18:54
→ loveme00835: 看不懂就嫌 code 概念嗎 xD 04/21 19:23
→ loveme00835: 簡單給一個提示: 通常遇到巢狀的 ?: 時, 會是擺在冒 04/21 19:30
→ loveme00835: 號 (:) 的右手邊做展開, 像是 a ? b : c ? d : e, 04/21 19:30
→ loveme00835: 這種結構才是必要的, 而且可以排版變成 switch 的長 04/21 19:30
→ loveme00835: 相, 寫成 a ? b ? c : d : e 這種形式基本上就是條 04/21 19:30
→ loveme00835: 件沒好好畫簡的結果 04/21 19:30
→ loveme00835: 試著化簡看看改成上面說的形式你會比較好理解, 其他 04/21 19:31
→ loveme00835: 形式根本上就是誤用 04/21 19:31
推 chuegou: 我不懂樓上舉例 必要性是指? 04/21 19:58
→ loveme00835: 以這個例子, i < 2 跟 !i 的值域重疊了, 同樣的情況 04/21 20:12
→ loveme00835: 也會發生在寫 if-else, 變成會有很深的巢狀結構 04/21 20:12
推 chuegou: 所以是在這個case 巢狀if比較不好的意思? 04/21 20:27
→ eye5002003: 編譯器最佳化之後還是一樣啊,好好的補上括號吧 04/21 20:59
→ oToToT: 問題就只是為什麼不加括號而已吧,畢竟沒多少人喜歡背各種 04/22 03:02
→ oToToT: 運算順序 04/22 03:02
推 jack82822005: 這就算沒加括號也只有一種解法吧?不懂難在哪 = = 04/22 03:40
推 kitehero: 寫短碼又不補括號真的很難讀 04/22 09:26
→ ggBird: 花時間看這種code,我還不如去幹茶妹 04/22 11:30
→ spong: 感謝各位神人的意見,小的非常感謝,(請收下我的膝蓋) 04/23 14:41
→ MOONRAKER: 不懂難在哪嗎 那最好希望你的同事也跟你一樣不懂 04/23 17:01
→ MOONRAKER: 自己玩沒人看就算了 在團隊中寫這種code就是整人 04/23 17:02
→ kobe8112: 我也不懂怎麼會不懂別人覺得難在哪,就算你是億中出一 04/23 19:02
→ kobe8112: 的天才,學任何事物都一蹴可幾,明白不是每個人理解能力 04/23 19:03
→ kobe8112: 都相同這種事,不就跟尿尿要脫褲子一樣是常識嗎? 04/23 19:04
→ kobe8112: 或是拉開拉鍊 04/23 19:04
推 mick90207: 加括號就可以方便大家解決的事情.... 04/27 12:49
推 richard88502: 我以為大型程式的宗旨就是簡單閱讀好維護欸XD 05/01 12:23
推 aecho: 嗯嗯,寫這種code的人真的要抓出來打 -.- 12/14 17:20
→ aecho: 有些人寫code,會自帶混淆程式碼的天賦技能 =.= 12/14 17:21