作者:
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括號加好就可以啦 不加還這樣寫真的搞死人
看不懂就嫌 code 概念嗎 xD簡單給一個提示: 通常遇到巢狀的 ?: 時, 會是擺在冒號 (:) 的右手邊做展開, 像是 a ? b : c ? d : e,這種結構才是必要的, 而且可以排版變成 switch 的長相, 寫成 a ? b ? c : d : e 這種形式基本上就是條件沒好好畫簡的結果試著化簡看看改成上面說的形式你會比較好理解, 其他形式根本上就是誤用
作者:
chuegou (chuegou)
2020-04-21 19:58:00我不懂樓上舉例 必要性是指?
以這個例子, i < 2 跟 !i 的值域重疊了, 同樣的情況也會發生在寫 if-else, 變成會有很深的巢狀結構
作者:
chuegou (chuegou)
2020-04-21 20:27:00所以是在這個case 巢狀if比較不好的意思?
作者:
oToToT (å±å©)
2020-04-22 03:02: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感謝各位神人的意見,小的非常感謝,(請收下我的膝蓋)
不懂難在哪嗎 那最好希望你的同事也跟你一樣不懂自己玩沒人看就算了 在團隊中寫這種code就是整人
我也不懂怎麼會不懂別人覺得難在哪,就算你是億中出一的天才,學任何事物都一蹴可幾,明白不是每個人理解能力都相同這種事,不就跟尿尿要脫褲子一樣是常識嗎?或是拉開拉鍊