对“最佳实践”的一些吐槽_Effective Modern C++书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Effective Modern C++ > 对“最佳实践”的一些吐槽
空明流转 Effective Modern C++ 的书评 发表时间:2015-12-09 16:12:14

对“最佳实践”的一些吐槽

因为前段时间为了写《C++模板进阶指南》看了大部分C++11的标准,所以就顺带着读了一下《Effective Modern C++》和GotW查漏补缺。

虽然我现在读这本书已经不像当年读《Effective C++》和 《More Effective C++》的中译本那样兴奋了,因为大部分内容都已经知道了。但是对于一些特殊情况,和一些被整理出来的特殊用法,还是有一种哎哟卧槽的感觉,比如讲using的那个Item,还有对于auto/declexpr/type deducing的解释。

整个Effective系列的成书,都是Meyers从社区搜刮来的。C++的八卦来源有很多,比较常见的是C++ Lang新闻组,标准委员会的定期会议以及被整理成册的标准提案,以及成员们自己写的博客(比如Sutter的黑板报,GotW)。这些材料,都可以归纳为:

1. 动机。一个Feature被提出来是为了解决什么痛点的;比如override就是为了处理一些看起来很像的函数的误覆盖。

2. 语法。C++好用的语法已经被榨干净了,所以接下来的新特性要怎么从一堆垃圾里面刨能用的语法出来就是看点。你看[[attribute]这个就忒神奇了。我觉得{{{{{{ What the fuck }}}}}}
这样的语法已经不再是梦。

3. 利弊。解决了原有问题后会不会带来什么新问题,会不会和已有特性冲突。

4. 案例。重申动机,举例子证明新设计的有效性。

这四点其实在标准提案中都有了。图书和黑板报除了这些内容,一般还会增加一个最佳实践,就是说一个特性应该怎么用,不应该怎么用。这些最佳实践都是大佬们开会讨论、大牛们反复吃屎得来宝贵经验,汇集了各种常用情况和corner case的应对,这是集体智慧的结晶。

当然,最佳实践不一定非要贯彻进工程实践中。举个例子,异常有很多最佳实践,比如怎么去最小化抛出异常的成本,怎么避免异常带来的内存泄漏。只是很多工程实践中,干脆直接就禁止了异常的使用,一劳永逸,阿弥陀佛,我的上帝,阿克拉 ... 。

但是了解最佳实践是非常重要的,因为有时候,最佳实践,真的就是非常好用的最佳实践。都有nullptr了,劳什子还要处理int和T*的重载在面对NULL实参时候所存在的潜在危险呢?都有shared_ptr的衣服穿了,还什么理由还要指针裸奔呢?

最后,吐槽还是要吐槽的。最佳实践一直都是C++最坑人的部分,光几本书加一起就有好几百条了,谁记得住啊。例如当年Meyers一再重申,Deconstructor不能抛出异常!不能抛出异常!不能抛出异常!然后写了三五页纸来阐述为什么。我也不记得为什么了,反正这是铁律,执行就是了。

到C++11,一群人开会一合计,觉得当年是不是脑洞开得太大了。构造的时候,借内存借资源借不到,析构的时候还内存还资源也不让还了吗!那有还人钱还还不成的道理!于是标准中,干脆就让delete不放异常,析构函数默认noexcept。

真要挂了那也是逆天行事,干脆听天由命吧。

-------------------------------------------------------------------------------------------------------

最后,重要的话说三遍:

0(以上都是吐槽,正经内容请自行看书)
1(以上都是吐槽,正经内容请自行看书)
2(以上都是吐槽,正经内容请自行看书)
3(以上都是吐槽,正经内容请自行看书)

展开全文
有用 6 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“对“最佳实践”的一些吐槽”的回应

熊德洛维奇 2017-02-20 16:31:59

对,禁止异常才是王道!某个C++平均能力极强的公司就是这么干的。

p1erce 2017-01-09 14:29:19

> 大牛们反复吃屎

太逗了~

resty 2016-04-22 17:08:30

不能抛出异常这事巨好理解。因为上层处理不了这种问题.