《EffectiveModernC++》是一本由ScottMeyers著作,O'ReillyMedia出版的平装图书,本书定价:USD49.99,页数:320,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。《EffectiveModernC++》精选点评:●趁最
《Effective Modern C++》是一本由Scott Meyers著作,O'Reilly Media出版的平装图书,本书定价:USD 49.99,页数:320,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。
《Effective Modern C++》精选点评:
●趁最近比较闲大概翻了七成内容。以前一个条目基本上是一个practical tip,配上非常compelling的示例,这本有很多是语言特性的说明和示例。嘛,毕竟c++11/14对大多数程序员来说还很新,社区的实践也没那么丰富,没办法。作为不多的c++11/14资料,还是要给5星。
●好书 毋庸置疑。但是很遗憾看到C++变得越来越复杂 而不是更简洁和好用。当然,更多的语言特性意味着更多的灵活性,但是也意味着更陡的学习曲线,更高的开发和维护成本,还有更高的出错概率。
●需要精读
●书还是可以的,但看着看着不免有“吾生也有崖”的感慨,无比嫌弃这一个个坑,而不是豁然开朗的痛快。
●c++我是越学越不会了,比35还难
●不错,c++11的好多坑
●有点啰嗦
●给4星和以上的要么是真看懂的,要么是完全没看懂的。刚知道我一个好基友在译中文版...保佑出书后不被板砖拍死吧
●已经C++11了,能不看这个吗?
●感觉就是C++11虽然填上了一些C++98的坑,但又引入了不少新坑。挺多新特性并不像它们表面上看起来那样简单。不过Meyers确实功力深厚,每个特性的前因后果都讲的一清二楚,给出的使用建议也很贴合实际。(其中关于smat pointer的部分看得我一头冷汗,自己写的程序里有不少错误的用法)
《Effective Modern C++》读后感(一):适合已经入门的一般读者
虽然对于业内人士(能熟练、正确地使用C++的,而不是三天两头自己给自己挖坑的用户)来讲大多老调重弹(C++11不算新),不过大略浏览了一下没有发现明显错误,且出现了我在3秒钟之内没反应过来的知识点,仅凭这点就值得一读。
《Effective Modern C++》读后感(二):不看不行!
在讲C++11的书中,这本是要读的。不管是前面的类型推导还是后面的智能指针,都很好的进行了解释了。当我们在利用C++11的特性的时候,如果不能够了解这些特性是不能够很好的进行程序开发。目前虽然还没有看完,甚至是即使是看完了,也要重复去看。这样才能够更好的去了解书中的内容。当然,看完还是要使用,这样才能够体会的更深。
《Effective Modern C++》读后感(三):对“最佳实践”的一些吐槽
因为前段时间为了写《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(以上都是吐槽,正经内容请自行看书)
《Effective Modern C++》读后感(四):C++ 魔鬼藏于细节
闲言
去年12月曾花了一周粗读了本书的中文版(https://book.douban.com/subject/30178902/),翻译的我完全看不下去,自此下定决定除了靠谱译者(例如侯捷)翻译的版本外,宁愿多花钱买原版书。原本预计两到三天读完的书,最终花了四天才完成。经过一年对C++的学习、阅读和使用,我认为对C++的学习不能像C那样在一次阅读中奢望将所有的细节搞懂。对于这本书的内容我也进行了阅读的取舍,将重点花在了11之后的新特性上:move semantics, type deduction以及concurrency,以及一些"better to know, but won't hurt"的language idiom。
C++的坑之多,即使compilation pass,运行结果符合预期仍然会让人惊讶。
例如用std::pair<int, int>去遍历一个unordered map会有什么unexpected performance overhead?
例如lambda expression用default capture时有什么需要注意的?(这学期测试server scalability时遇到过这个坑,capture by reference将socket fd改变了,debug了整整两天)
例如only use move semantics at the final call(这学期final project中我把resend机制使用的message给move了,导致只要遇到丢包进行resend就会发生exception)
例如面对几万个request,detach thread会造成system error(software thread超过限制),该怎么解决?(我这学期只是将thread数目做了上限,并没有真正解决这个问题)
诸如此类的坑。这些坑没踩过的话,可能会轻视,一带而过。受过伤的人才知rule的意义。
达佬总是劝我,在读tech时只挑重点的读,但力图将细读的内容完全搞懂。他在学习Three Easy Pieces也是如此。其他的内容略过便是,以后工作中用到再说。但我总觉得以后实习、全职后再也没有学生时代这样整块的时间,能够all-in一本技术书籍手册。
对于我来说,年龄大了,也到了要规划时间,决定读什么书更有用、读书的什么部分更有用的时候了。在这个时候读到这样一本好书无疑是件幸事。
Reference
在读这本书的过程中参考的一些资料:
O: https://akrzemi1.wordpress.com/2019/04/14/common-optimizations/
TCPPPL中关于string的一个实现(通过union实现SSO)
RVO: https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en
lambda: http://umich.edu/~eecs381/handouts/Lambda.pdf
Practice makes perfect
上面讲到的smart pointer,concurrency,move semantics都是使用的技术,理应动手实践。
有时间的话,我会考虑用smart pointer实现doubly-linked list, tree map(red-black-tree based)
另外就是类似golang中可重用的channel,coroutine。C++是个优于造轮子的语言。
So ... what's next?
everal other materials to cover in the future, industry-level project and all-time reference
C++ concurrency in action(https://book.douban.com/subject/27036085/)
Is parallel programming so hard(https://book.douban.com/subject/6957175/)
modern C++ design(https://book.douban.com/subject/1755195/)
TL源码剖析(https://book.douban.com/subject/1110934/)
C++ templates(https://book.douban.com/subject/11939436/)(注:先读这本书的第一部分对理解modern effective c++有帮助)
more effective C++(https://book.douban.com/subject/5908727/) revisit
GoF(https://book.douban.com/subject/1436745/)
Folly(https://github.com/facebook/folly)
Google test(https://github.com/google/googletest)
C++ guidelines(https://github.com/isocpp/CppCoreGuidelines)
闲言2
昨晚和达佬在讨论auto decltype(auto) auto&&区别的时候,自然而言的就说到常见语言特性就该是本科时候熟悉、掌握的,如果从本科开始就接受CS/SE的教育该有多好。所以也尤其不理解在25岁的年龄,为什么会有人每天把大把的时间花在游戏和追剧上。anyway, none of my business.
如果认为本文对您有所帮助请赞助本站