Soft_Job 板


LINE

从 C++ 的角度来说 三元运算子有机会改变 l-value/r-value 的性质,进而破坏最佳化 举个简单例子 https://wandbox.org/permlink/8blhqHl417Zmrh9a 可以看到用三元运算子的时候,回传区域变数竟然要 copy 而不是 move 虽然说 Java 没有这些 不过你就知道看起来很简洁的东西,也可能会有你没意识到的副作用 因为有了这个认知 我个人现在不管什麽语言,都是尽量不用三元运算子,让自己习惯用安全的写法 ※ 引述《a88241050 (再回头已是百残身)》之铭言: : 小弟写java的 : 以前常常写三元判断式 : 就比如说 : String a; : if(con) { : a= "aaa"; : } else { : a="bbb"; : } : 这样就要占掉六行 : 所以我通常都是写 : String a= con ? "aaa" : "bbb"; : 从五行变成一行 : 在我看来简洁又方便 : 但最近给一个资深前辈code review的时候 : 他说不要用三元判断式 : 因为不好阅读 : 他工作那麽久也从来不用三元判断式的 : 而且java有很多套件都可以用来取代三元判断式 : 所以用三元判断式真的不好吗? --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.69.15 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1671040535.A.A1A.html
1F:推 yyhsiu: +1此观点,Java 虽然没有这种问题,但这表示这个语法一般 12/15 02:36
2F:→ yyhsiu: 性来说,水很深。不能期待大部份人都深刻了解 12/15 02:36
3F:→ yyhsiu: 个人感觉,如果这知识不是在学这语言前三个月之类的就掌握 12/15 02:38
4F:→ yyhsiu: 表示之後的维护者很可能缺乏这知识。必要性不足的还是避免 12/15 02:39
5F:推 mmonkeyboyy: C++在很多地方都不能三元 一送上去会被自动检查打枪 12/15 05:27
6F:→ mmonkeyboyy: 语法真的是简单为上 有更多事要担心 这个就轻松点 12/15 05:28
7F:推 hobnob: 推这篇 12/15 08:57
8F:推 leptoneta: 厉害 12/15 09:24
9F:→ cathychg: 你原本念的是餐饮 电机 还是资工系 12/15 09:41
10F:→ cathychg: 这听起来像电机的观念 欸 非常前卫喔 12/15 09:41
11F:→ cathychg: 我没有念过电机系 12/15 09:42
12F:推 cathychg: https://i.imgur.com/cyrFsY4.jpg 12/15 09:43
13F:→ cathychg: https://i.imgur.com/DOAJ2AD.jpg 12/15 09:44
14F:→ cathychg: https://i.imgur.com/2zeLhGt.jpg 12/15 09:45
15F:推 HuangHedaz: 借问下“回传local scope object”这本身就很怪? 12/15 09:54
试想你要写一个 split string 的函数,应该直觉会宣告成这样吧 std::vector<std::string> Split(const std::string& str); 那这个回传的 vector 是不是必然是函数内的区域变数
16F:→ antpro: It's nothing to do with trinary operator... 12/15 09:57
17F:推 hobnob: cathy 的魔掌已经伸来软工版了…? 12/15 09:59
18F:推 lycantrope: 只好推rust了,compiler一拳往你脸上,态度矫正 12/15 10:29
19F:推 chuegou: 态度矫正应该是摔技(错棚 12/15 12:09
20F:→ ssccg: Java放到C++会有问题的写法一堆,要考虑这个还写什麽Java 12/15 12:43
21F:→ ssccg: Java发明出来就是为了减化C++的这种问题,让写的人不用想什 12/15 12:48
22F:→ ssccg: 麽区域变数不区域变数,怎麽传都安全,结果还自己假想会遇 12/15 12:49
23F:→ ssccg: 到危险,个人认为这很低能 12/15 12:49
24F:→ ssccg: 不同语言就有不同的style切换,没办法切换非要用一套习惯是 12/15 12:50
25F:→ ssccg: 个人问题吧 12/15 12:50
为了活用语言特性当然会有不同的 style 但是以本串的 conditional operator vs if-else 来说: 1. 并非语言特有 2. 不影响效能 3. 不影响可读性 纯粹只是自己看得爽不爽的问题
26F:推 HuangHedaz: C++的 copy & move constructor 12/15 13:37
27F:推 YukiTW: 水很深 12/15 17:08
28F:→ superpandal: 并不是所有语言用惯用安全语法就更好写... 例如shell 12/15 18:25
29F:→ superpandal: 一堆if else的烂脚本比比皆是 不同语言语法都不同 不 12/15 18:27
30F:→ superpandal: 同语言采取不同用法更好 你也不可能统一规范 因为一 12/15 18:28
31F:→ superpandal: 堆语言都有独特点 写java跑去写python都会觉得很不适 12/15 18:31
32F:→ superpandal: 应先入为主 12/15 18:31
觉得不好写其实就是不习惯 曾经我也跟原 po 一样,觉得一行能写完的东西变成那麽多行,马德爆干丑 所以我说不分语言都会倾向使用 if-else 是为了让自己习惯 写多了就不觉得丑,才不会那麽排斥 也可以说是洗脑自己 XD
33F:推 Dracarys: https://wg21.link/expr.prim.id.unqual#4.1 12/15 20:10
34F:→ Dracarys: 看来是因为id-expression才有资格implicit move 12/15 20:10
35F:→ Dracarys: 不然conditional operator在这不改变value category 12/15 20:10
36F:→ Dracarys: https://wg21.link/expr.cond#5 12/15 20:10
37F:嘘 pttano: c++的行为跟如何最佳化有关吧,拿这个跟Java比? 12/15 22:55
38F:嘘 Dracarys: 跟最佳化无关 12/15 23:16
39F:推 Dracarys: 这个case就只是E1 ? E2 : E3没被规定成move-eligible 12/15 23:49
40F:→ Dracarys: 自己用std::move cast到xvalue就好。 12/15 23:49
41F:→ Dracarys: 跟优化无关,clang & gcc ToT开O3都做不到 12/15 23:49
42F:→ Dracarys: [class.copy.elision]描述的copy/move elision 12/15 23:49
感谢补充 (^人^ ※ 编辑: holydc (61.228.73.53 台湾), 12/16/2022 00:49:38
43F:推 HuangHedaz: @holydc 你那举例不算是return local scope object而 12/16 15:34
44F:→ HuangHedaz: 是 pass local scope object 到 split function 做处 12/16 15:34
45F:→ HuangHedaz: 理 12/16 15:34
46F:→ superpandal: 所以我才拿shell当例子 写shell这样写我基本不太相信 12/16 19:24
47F:→ superpandal: 有人受的了 比起习惯乱七八糟甚至屎山 你把他弄的更 12/16 19:25
48F:→ superpandal: 容易维护对你能如期甚至提前完成需求以及节省体力不 12/16 19:26
49F:→ superpandal: 是更好吗 mp消耗完就要消耗hp了 12/16 19:27
50F:嘘 Jichang: 这种例子太多了 有的没有分号结尾 有的不能用++ 有的要缩 12/17 13:06
51F:→ Jichang: 排有的不用 干脆写组语了 12/17 13:06
52F:→ Jichang: 很多语言没继承 没closure 没interface 没有Coroutine 是 12/17 13:12
53F:→ Jichang: 不是都不要用比较好 12/17 13:12
54F:推 freef1y3: 长姿势 12/17 22:34







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP