Effective C++ 学习笔记 9:杂项讨论
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 53:不要轻视编译器的警告Pay attention to compiler warnings. 编译器的警告通常都有作用,如果没有真的知道编译器的警告是什么意思,请不要随便忽略它,虽然它不像错误那样会终止程序的编译。 总结 严肃对待编译器的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。 不要过度依赖编译器的警告功能,因为不同的编译器对待事情的态度不同,一旦移植到另一个编译器下,可能原本依赖的警告信息就不存在了。 条款 54:让自己熟悉包...
Effective C++ 学习笔记 8:定制 new 和 delete
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 49:了解 new-handler 的行为Understand the behavior of the new-handler. 现代 C++ 中的 new 在无法分配有效空间时,会抛出一个 no_alloc 异常,有些时候,我们不希望抛出异常,而是能让分配失败时进入到一个处理函数中,这个机制 C++ 是支持的,它叫做 new_handler。提示:new_handler 中的 new 是指 operator new 的意思,表示保存 new 操作处理函数的意思,而不是指...
Effective C++ 学习笔记 7:模板与泛型编程
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 41:了解隐式接口和编译期多态Understand implicit interfaces and compile-time polymorphism.隐式接口和编译器多态这两个概念,是通过C++ 的模板(和重载机制)而引入的。 首先说编译期多态。一种实现是重载,即在编译期间表现出的多态,在编译期就可以静态绑定到实际的对象和函数中。另一种就是模板,如函数模板和类模板。一个简单的函数模板实现: 1234567template<typename T>void fu...
Effective C++ 学习笔记 6:继承与面向对象设计
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 32:确定你的 public 继承塑造出 is-a 关系Make sure public inheritance models “is-a”. public 继承表示 is-a 关系,也就是它始终能表示派生类是一个/是一种基类,能接受基类的方法也一定能接受派生类,基类的属性也一定应该是派生类的属性。比如学生是人,人有的东西,学生也有。但反过来不成立。但是,有些时候这种 is-a 关系并不一定始终成立。比如企鹅是一种鸟,鸟能飞,但企鹅不能飞。这个例子告诉我们的是,...
Effective C++ 学习笔记 5:实现
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 26:尽可能延后变量定义式的出现时间Postpone variable definitions as long as possible. 尽可能的在需要使用变量(或指类型对象)时,再定义对象,尽可能避免无用的构造和析构操作。 如果构造对象之后,紧接着需要对对象进行赋值操作,更好的设计是直接调用有参数的构造函数直接完成。如: 1234std::string enc; // 调用默认构造函数enc = pas; // 再调用赋值运算符重载函数// 以上不如直接...
Effective C++ 学习笔记 4:设计与声明
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 条款 18: 让接口容易被正确使用,不易被误用Make interfaces easy to use correctly and hard to use incorrectly. 首先需要考虑用户可能会如何误用你的接口,尽可能避免被误用。 限制参数的值范围,用特殊类型替代一些值。 约束 const。 让你的接口的用法与内置类型接口保持一致。 避免返回资源的接口用户忘记释放资源或错误释放的办法:直接返回智能指针类型。 总结 好的接口很容易被正确使用,不容易被误用,应该努力达到...
Effective C++ 学习笔记 3:资源管理
Effective C++ 学习笔记 1:让自己习惯 C++Effective C++ 学习笔记 2:构造、析构、赋值运算Effective C++ 学习笔记 3:资源管理Effective C++ 学习笔记 4:设计与声明Effective C++ 学习笔记 5:实现Effective C++ 学习笔记 6:继承与面向对象设计Effective C++ 学习笔记 7:模板与泛型编程Effective C++ 学习笔记 8:定制 new 和 deleteEffective C++ 学习笔记 9:杂项讨论 计算机资源,除了我们熟悉的内存,还包括其他需要在使用时占用,在使用后归还给系统的东西,还包括如文件描述符、互斥锁、图形控件、数据库连接、网络端口等。 条款 13: 以对象管理资源(重要)Use objects to manage resources. 话题 1:不要让调用者回收资源不要把 delete 的工作单独留给调用者。有些时候是担心调用者忘记 delete,但更隐晦的情况可能是调用程序写了 delete,但因为一些原因,不会执行到 delete,比如之前的一些异常,或者隐...
高考后如何报志愿
高考报志愿建议(一):学校篇你好大家, 再有半个月,最辛苦的一届高中生就要迈步上战场了。如果你的孩子今年要高考,或者你有朋友要高考,都可以看一下这篇文章,我有几个建议想和你聊。 高中毕业有三条路,读大学、出国、就业。我无法给出出国和直接工作的建议,本文只讨论就读国内大学。 大结论放前边,学校 > 城市 > 专业。虽然我们总是会先想到选什么专业,但事实上选专业是相对次要的(相对次要,不等于不重要)。 什么是好学校一个好学校,一定拥有好的学生、好的老师、丰富的生活资源、更多的机会、以及找工作的优势。 1)好的学生同学就是人脉。同学的友谊,比职场友谊会更亲密一些,而大学是最后一个结交同学友谊的机会。 而且因为人渐成熟,大学也是最容易结交一生挚友的机会。工作之后,遇到校友也很可能会帮扶一把。 2)好的老师这里我指的并不是专业能力强的老师,而是人生导师,后者帮助孩子塑造好的性格和世界观(尤为重要)。 很多成功的人,都会提到自己年轻时曾给过自己珍贵意见的老师。 我在大学里很多知识都靠自学,留给我深刻印象的都是指导我职业发展和性格成长的老师。 3)丰富的生活资源大学会给孩子...
编写一个LLVM后端
本文翻译自 LLVM 官方的一篇教程:Writing an LLVM Backendreleases.llvm.org/10.0.0/docs/WritingAnLLVMBackend.html#instruction-scheduling 该文档需要有一定的 LLVM 和 编译原理的基础。LLVM目前的更新很活跃,请注意跟踪项目最新变更 1 介绍这篇文章描述了如何编写一个用于将LLVM中间表示(IR)转换成特定目标机器上的代码或其他编程语言的编译器后端的技术。作用于特定目标机器的代码可以使汇编码形式,也可以是用于JIT编译器的二进制码形式。 LLVM的后端特点是目标无关代码生成器,它可以输出多种不同类型目标CPU的代码,包括X86、PowerPC、ARM以及SPARC等。后端也会被用来生成如SPU一类的元胞处理器(Cell processor)或者是一些GPU上的计算内核。 这篇文章专注在的路径是在release版本LLVM源码路径下的llvm/lib/Target,尤其是专注于举例如何编写一个为SPARC目标平台的静态编译器(也就是发...
近君子而远小人
君子与小人在《论语》中,君子和小人指品德高尚性情文雅的人和徇私舞弊品行低劣的人,现在也沿用了这一种解释。 虽然我们不能以极端的态度去评价人,去决定哪个人是君子,哪个人是小人,但我们可以判断哪些人像君子,哪些人像小人。 所谓之,心诚求之,虽不中,不远矣。内心倾向于君子品行的人,其本身就不远于君子,而相反,其不远于小人。 我的生活中,大多数人都是非常优秀和善良的人,我也以诚待人,并乐在其中,故而从没有认真看待过那些极少数不善良、人品差的人,甚至自己从没有意识到,自己身边也会存在这样的人。 如何辨别君子与小人孔子说过,君子坦荡荡,小人长戚戚。 这是我发生这件事后,体会最大的一句话,君子做事坦坦荡荡,胸襟开阔,乐观随性,明辨得失,敢于承担自己的错误但也坚定自己正确的信心,做高尚善良的事,不怕无端议论和恶意诽谤;小人做事唯唯诺诺,患得患失,牟取别人的成果满足自己的利益。 孔子还说:君子求诸己,小人求诸人。 这句话的意思是,出了问题,有了矛盾,君子首先想到的是自己哪里没有做对,哪里需要改善,改进缺点不断进步;小人永远不会检讨自己,只会从别人身上找原因,甩锅给其他人,甩锅给集体和社会,一切问题...














