(cppcon)一些老的编程规范的反思
14 Jun 2020
|
|
goto harmful?
goto更像汇编一点。
感觉是老生长谈了,常用的goto场景还算处理错误码退出,还列了论文,高德纳的
goto 在c++:可能那个跳过构造函数,漏掉初始化(编译不过/编译告警),注意(setjmp是不是也这样)
循环中提前退出, goto版本更高效 (why??)
switch里用goto c++里没有对应的应用,类似 duff’s device????? 手动展开循环 别手写,让编译器干这个活
用switch就算用goto了
讨论了其他语言中的使用套路 pattern, 没记录 只记录c++相关的
- 不能跳过复杂类型初始化?non-vacuous怎么翻译?我大概理解就算没有默认构造的
- 不能跳出/跳入函数
- 不能用在constexpr函数
- 不能跳入try catch,跳出没事儿(都try-catch了还用goto感觉有点分裂)
函数退出集中起来。
(确实,多路返回的代码让人痛苦,我也写过那种。。 不清晰)
上面讨论的for循环return 低效,可以把for中间判断限制一下,提前break,起到goto效果
返回值复杂,比如variant 使用overload trick,variant的switch
几种例外,能省构造等等。各取所需
成员变量private访问权限
封装 不变量 提前设计 即使你用不到 需要c#那种proprity? class封装和struct那种透明的语义就不一样了。还是哪句话,用不到不要过度设计
声明就初始化
可能写成函数声明了,ecpp有一条 某些场景没必要非得初始化 你不用的,不要多付出
还有在函数开头声明,这是c的习惯,可能用不到,白白浪费构造 其他语言也是一样,什么时候用什么时候声明 两部初始化,工厂模式
ref
- https://www.bilibili.com/video/BV1pJ411w7kh?p=12
- ppt 在这里 https://github.com/CppCon/CppCon2019/blob/master/Presentations/some_programming_myths_revisited/some_programming_myths_revisited__patrice_roy__cppcon_2019.pdf