C_and_CPP 板


LINE

文有点长 由於跟外国同事共同开发程式互相有code review. 某位同事写的code已经有点超过了, 并且会干预其他人如果不是他那种style写法 会要求 改正 以下是 每一种写法 我标数字 目的是希望大家可以给我一些建议是不是他太超过还是我 还无法体会他的好 1. auto v = Foo<int>{}; auto v = vector<int>{}; // 永远使用{}, {} 在container上很好读, 但他不管怎样一定是{}, ()已近乎消失 // 永远auto = // vector<int> v; 臭了吗.... 我个人觉得不该滥用 "等号" 我有用一些观点例如 copy cstor被delete情况, 只是因为你现在用c++17才给过, 建议他可以考虑相容c++14 但也是被驳回 说 不需考虑. int a = 1; 写成 int a{1}就很怪 Foo f{1,2,3}; 会让我以为他提供initializer_list 的建构子 殊不知其实只是想呼叫 Foo(int,int,int)版本的, 这样写真的是被鼓励的吗? 我觉得要变通而不是完全弃用 () 建构 2. 承上 auto ptr = static_cast<Foo*>(nullptr); 就是不肯 Foo*ptr = nullptr; 甚至他写 struct Data { auto A = std::string{}; auto B = ENUM::X; auto C = int{}; auto id = static_cast<add_pointer<GUID>::type>(nullptr); } 这很夸张 我对於struct肯定是不用auto 甚至我想问各位 struct 每个element都给初始直 这是好的吗? 对我来讲这是使用这struct的人的义务 Data d{....给初始直} or d.A = d.B = 一个一个给 不知道各位喜欢哪种 针对struct 3. 承上 auto p = std::add_pointer<void>::type{XXX}; auto p = std::add_pointer<int>::type{...}; 之前他因为不知道std有提供add_pointer, 还刻意写一个traits 为了写出这行 int* p = ....; 竟然不是他脑中的首选....我实在无法理解 4. 承上 auto Foo(..............................................................) -> void auto Bar(..............................................................) -> std::vector<...> 永远都是auto -> type 的写法 甚至 auto main(..) -> void 这trailing return type我一直无法体会好处,除非要deduction不然到底优点是什麽? 5. auto const* p = ....; 基本上这没问题 但是多数人都是const auto* p; 但她却坚持不follow多数 6. 大量使用3rd MACRO,让程式码呈现类似 XXX_RETURN_YY_IF(Method()); LOG_ERROR_IF(!rc); auto XXX -> noexcept TRY(); CATCH_RETURN(); THROW_IF(.....); 只要他写的code都是这种长相的....说真的对我来讲好难读... 甚至写一段程式没用到macro 还会担心是不是有macro可套 7. 坚持C++ exception 一定比error code来的好 所以要求团队有error都要用exception, 如果实作上用exception会不好设计的话请提出 来 当成特例来讨论 对於noexcept有没有加非常计较跟坚持 如果设计dll errorcode dllexport... API() { try { auto rc = XXX(); if(rc == FAILED) { throw yyyy; 让下面接} return success; } catch(...) { return yyy; } } 为了用exception....但又不能往dll外丢 竟然自丢自接...无法理解 8. std::size() std::data() std::begin() std::end() 只要用了 type.size() type.data() type.begin type.end都会被逼着改... 我想说的是 如果写template code当然用std::xxx会更generic....但不是, 都是在非te mplate情形,用自己member 合情合理(是不是可以减少compile 时间,因为不用产生tem plate程式码?) 9. 写出 std::chrono::.... 会被要求改成namespace chrono = std::chrono 这我有点傻眼 写std::不是明确又更好理解吗? 10. template<class T> class Foo { void Bar(T&& t){ Baz(std::forward<T>(t)); } }; 坚持说是用forward, 给他很多例子跟gcc vector实作也无法接受... 但因为结果论 是一样的效果,所以我说服失败,反倒是被质疑只写std::move是想少打字 吧? 11. class Foo { std::string s{}; vector<int> v{}; int a{}; Type x{}; }; 这边要说的是....{}固然没问题, 但 不加不是更简洁好读? int a{} 为什麽就是不肯 = 0? 甚至 有时候会写 int a{0}; 12. 几乎写一般函数都写在header然後冠上inline(一看也觉得不可能inline成功的) 理由说 有文章说让compiler自己决定能不能inline, 程式效能更好(成功算赚到). class的话也是尽可能实作写header (反正内部的code, 不是要变成shared library) 其实wiki也写了缺点,header only难道在非template library上有也是被鼓励的吗?( 假设code size变大 不重要) 13. 承上 class Foo{ static int a; 坚持不写 一定要写 inline int a;} 他认为的好处是 不用特别找cpp写定义, 更能贯彻header only 的写法 14. 因为会写windows平台的程式 他会把用到的win32 api都wrap一层 例如 raii_handle CreateThread(...) { auto h = ::Creathread(...) THROW_IF(!h) return h; } 之类的 方向是把win32 error code base的api变成exception based.... C++真的exception是被鼓励的吗? 对我来看 B>Z阿... 其实还有很多而且越读他的code会越多奇怪的坚持产生 例如 return std::move(local var)... 刚好vc似乎不会跳warning变成好像很难说服他改掉(我说这多余的,且限制最佳化了, 但被无视) 对方大方向是 大量使用auto , 增加"可读性", 读者or呼叫者不care型态 用auto完全的对他来讲好读 (我完全相反 让我理解力大减 我还要多跳过去定义看型别 去思考是否有问题, auto XXX(....很长)-> type , 我为了要看type我还要拖曳到右边看.) 对方认定 vector<int> v;是 c style 初始方法 要大家用C++ style auto v = vector<int>{};写 对方非常爱贴文章 只要你提出相反意见他都可以拿文章来回 要我去看文章(还有所谓的AAA style....) 对方是真的花心思会去follow youtube cppconf的talk.... 但共识久了 会觉得对方 真的是教课书说什麽就什麽 而且似乎查资料只查他认同的 关键字很可能都是下 "exception better than error code c++" 之类的找文章.... 我不喜欢这种照本宣科的, 但只要他一贴文章大概就句点了 (又臭又长, 我也不想细看 反正用英文讲不赢) 请各位提供一些意见 当然这些都是被网路上广泛讨论的topic...但这版似乎没特别针对这些来讨论 希望得到大家的回馈,有些也许真的是被鼓励的但我还没学到真谛 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.247.130.34 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1589132323.A.144.html ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 01:44:42 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 01:49:03 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 01:52:03 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 01:59:26 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 02:04:12 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 02:25:15 ※ 编辑: lovejomi (27.247.130.34 台湾), 05/11/2020 02:35:04
1F:→ wawi2: 放大绝 说他那样写unreadable 05/11 04:57
2F:推 Morris1028: 同事: this is my art 05/11 06:43
3F:→ Morris1028: 可能要转发到 soft job 版做谘询 05/11 06:49
4F:推 ko27tye: 他是只从c++11开始学的吗 蛮多观念是The C++ Programmin 05/11 08:35
5F:→ ko27tye: g Language第四版上写到的 05/11 08:35
6F:→ ko27tye: 但全盘接受不思考情境就用感觉很差 05/11 08:37
7F:推 mintece: 10不就是应该用forward吗?用move的话要是lvalue ref传 05/11 08:47
8F:→ mintece: 进来会不小心被move? 05/11 08:47
9F:→ lovejomi: @mintece: 不对 这边的话不是forwarding reference 05/11 09:23
10F:→ lovejomi: 这边确实是rvalue ref 但是刚好用forward效果一样 05/11 09:24
11F:→ lovejomi: @wawi2: 就是因为我说不好读 他说他觉得好读, 他大绝就 05/11 09:24
12F:→ lovejomi: 是贴他认同的文章 例如 https://bit.ly/2YNuonr 05/11 09:26
13F:→ lovejomi: 这篇主要不是要找我的同好, 而是想看多数人观点 05/11 09:26
14F:→ lovejomi: 他有这种坚持我想也许是某些国外有名的人有推, 但我没有 05/11 09:26
15F:→ lovejomi: 得到他核心的好处 甚至觉得搞得很复杂 难读 05/11 09:27
16F:推 Morris1028: 从维护和重构上的潜在问题扳倒 05/11 09:45
17F:推 CoNsTaR: 不影响架构的东西都随便啦 05/11 09:57
18F:→ CoNsTaR: 没定 convention 你管他那麽多 05/11 09:57
19F:推 ddavid: 但人家都开始强迫别人也这麽写啦,你不管他那麽多,他倒是 05/11 10:12
20F:→ ddavid: 管过来了啊XD 05/11 10:12
21F:→ lovejomi: 他那样好读吗? 我怕其实是好读的 我太墨守陈规了 05/11 11:40
22F:→ mintece: @lovejomi 你是对的,我眼花了。 话说其他同事也有跟你 05/11 11:42
23F:→ mintece: 一样想法的话不能民主决定吗? 05/11 11:42
24F:→ lovejomi: 我可能有点夸饰了,对方没有直接强迫要你改,整个团队 05/11 11:52
25F:→ lovejomi: 很熟C++的人不多, 我熟 那位同事也熟,其他人不熟或是 05/11 11:52
26F:→ lovejomi: 只写过c++11之前的程式,但另一位外国同事不熟新语法( 05/11 11:52
27F:→ lovejomi: 还在C++11之前) 会觉得他写的似乎都有其道理 05/11 11:52
28F:→ lovejomi: 例如他说了什麽comment 另一个就会说 I agree with XXX 05/11 11:52
29F:→ lovejomi: , you should use XXXXXXXXXXXXXX 05/11 11:52
30F:→ lovejomi: 然後风向就是他们的了, 对方口气不是强制要你改 但口气 05/11 11:52
31F:→ lovejomi: 会是让你感觉不改好像我冥顽不灵.. 05/11 11:52
32F:→ lovejomi: 并且他这样把他的style带进来 会让整份code四不像....真 05/11 11:52
33F:→ lovejomi: 心觉得难读,但还是必须提出来讨论,毕竟对方有坚持有 05/11 11:52
34F:→ lovejomi: 读书应该是有一些值得学习的好处只是我目前看不到 05/11 11:52
35F:推 steve1012: 可以找些core guideline 或知名的style guide 参考 05/11 13:06
36F:→ steve1012: 硬要用auto 是有点怪了啦 05/11 13:06
37F:→ steve1012: return std::move 只有很少状况好用 而且会block copy 05/11 13:07
38F:→ steve1012: elision. 这应该可以贴出standard 反制了 05/11 13:07
39F:推 eye5002003: 我记得return std::move根本多余,编译器自己就很清楚 05/11 13:14
40F:嘘 MartinJ40: returen std::move根本多余 他根本没念书吧 05/11 13:15
41F:→ MartinJ40: effective modern c++就有提到不需要return move 05/11 13:15
42F:→ eye5002003: 该怎麽做;第6点踩到我的地雷了,除错时会很棘手 05/11 13:18
43F:推 MartinJ40: 同意 想要c++17化就不要macro 用template 05/11 13:21
44F:→ eye5002003: 我对auto的理解是"不用重复写type",等号右边有写就不 05/11 13:21
45F:→ eye5002003: 用左边也写一遍,或者你不关心型态是什麽的时候才用 05/11 13:25
46F:→ shadow0326: 里面我唯一会帮他说话的是9,但不是因为写std::不好 05/11 14:08
47F:→ shadow0326: 而是因为这种东西整个团队一致的话比较不会有强迫症问 05/11 14:09
48F:→ shadow0326: 题xd 不过要和他一致或和你一致这我也没意见xd 05/11 14:09
49F:推 ddavid: 6是真的很恶心,而且macro这东西也要自己看过内容才知道怎 05/11 17:01
50F:→ ddavid: 麽用不会冒出莫名其妙的问题啊XD 05/11 17:01
51F:→ ddavid: 6只有ioccc之类比赛好用吧XDDD 05/11 17:02
52F:→ loveme00835: 学半套笑死 xD 05/11 19:42
53F:→ nevak: 大部分是anti pattern就不多说了,要是他在code review意 05/11 20:06
54F:→ nevak: 见很多,可以请他写一份coding guideline,大家再来review 05/11 20:06
55F:→ nevak: 。客观来说就算他说的是对的,整天code review要改这些很 05/11 20:06
56F:→ nevak: 没效率。记得规则订好再找个自动检查的tool。 05/11 20:06
57F:推 loveme00835: 第八点是为了透过 ADL 让所谓的 extension code 可以 05/11 20:09
58F:→ loveme00835: 动, 这个尤其在引入第三方函式库的时候需要做更新或 05/11 20:09
59F:→ loveme00835: 是改变行为时可用, 但 C++17 以前不会用 qualified n 05/11 20:09
60F:→ loveme00835: ame 来呼叫, 在 C++20 以後因为有 CPO 所以反而要用 05/11 20:09
61F:→ loveme00835: qualified name, 未来的函式库像也都是朝着 non-mem 05/11 20:09
62F:→ loveme00835: ber/rangify 的方向走, 你自己倒是用直接写扣把扩充 05/11 20:09
63F:→ loveme00835: 性给杀掉了. 一部分是你的问题, 但双方对 feature 一 05/11 20:09
64F:→ loveme00835: 知半解, 我觉得就算发文解释也不会有效果就是, 就像 05/11 20:09
65F:→ loveme00835: 你即使无法接受同事的写法也不会去了解原因一样 05/11 20:09
66F:→ loveme00835: 第 9 点也是一样的, 如果 std:: 的东西没那麽 powerf 05/11 20:14
67F:→ loveme00835: ul, 需要扩充的时候, 你会发现所有写 std:: 的地方全 05/11 20:14
68F:→ loveme00835: 都要砍掉重写, 如果你的 interface type 也都用 full 05/11 20:14
69F:→ loveme00835: y qualified name 来写那真的就是灾难. 看叙述你的同 05/11 20:14
70F:→ loveme00835: 事的开发经验应该比你丰富很多 05/11 20:14
71F:→ loveme00835: 没有 code 是不需要修改的, 所以 code 要尽量写得很 05/11 20:17
72F:→ loveme00835: generic (不限於模板), 这个在 C++ 的演进可以看出这 05/11 20:17
73F:→ loveme00835: 个核心思想: type constraint, meta class. 写得像 j 05/11 20:17
74F:→ loveme00835: ava 的东西直接丢掉就好了 05/11 20:17
75F:→ loveme00835: 他的某些用法在开发跨平台/语言标准的函式库时很常见 05/11 20:31
76F:→ loveme00835: , 尝试去思考: 如何把 code 写成让不同编译器吃都能 05/11 20:31
77F:→ loveme00835: 过, 就能理解这个观念. 如果只是写 app 可以不用知道 05/11 20:31
78F:→ loveme00835: 那麽多 05/11 20:31
79F:推 MartinJ40: 这跟拿佛经遇到拿圣经讲话的很像 05/12 13:50
80F:→ MartinJ40: 互相伤害个几次才知道尊重 05/12 13:50
81F:→ MartinJ40: 光是google coding style和llvm style就有冲突的地方了 05/12 13:50
82F:→ MartinJ40: 对方爱贴文章你也贴文章和影片反击 05/12 13:50
83F:→ tinlans: 对方有母语优势,吸收新知的速度比你快,但基础观念有缺 05/12 16:01
84F:→ tinlans: 陷,你基础观念有些地方比他好,但是吸收新知速度没他快 05/12 16:01
85F:→ tinlans: ,所以你很容易被大量主流社群文章扳倒。 05/12 16:02
86F:→ tinlans: 所以除非你自身能更进步,否则只能寻求政治解。 05/12 16:02
87F:→ tinlans: 拿 google 和 llvm coding style 讲不赢这种人,因为那些 05/12 16:03
88F:→ tinlans: style 确实是由一知半解和顾虑一知半解的多数族群制订的 05/12 16:04
89F:→ tinlans: ,专注在 C++ 领域的人有不少人对这些 style 很轻蔑。 05/12 16:04
90F:→ tinlans: 不要说国外,光 llvm 那份丢到板上来可能也有不少人不屑 05/12 16:05
91F:→ johnidfet: 五五波 他有些坚持是对的 有些应该是suggestions不应 05/12 20:00
92F:→ johnidfet: 该强制 05/12 20:00
93F:推 TakiDog: 不论是coding style 还是 commit 的冲突 05/12 20:04
94F:→ TakiDog: 一律推荐出去外面打 05/12 20:04
95F:→ ketrobo: 7很好用,特别是让自家的程式适应各种的规格变动,14是延 05/13 04:34
96F:→ ketrobo: 伸7的设计 05/13 04:34
97F:→ lovejomi: @tinlans 说出我的心里话 母语优势让我觉得速度没他快 05/13 15:38
98F:推 TobyH4cker: 太呱张了吧 05/14 01:19
99F:→ Linvail: 1.看公司规定 2.看职位高低 3.看主管挺谁... 05/19 19:51
100F:推 cia1099: 其实我觉得他写的code挺屌又酷的 07/26 10:54







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