[问题] 关于三元运算子

楼主: 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