上一页 1 ··· 3 4 5 6 7 8 9 10 11 下一页
摘要: 1. 如果变量定义得过早,那么如果在变量定义后被用到之前出现异常,变量未被用到,但仍然要承担构造和析构成本,此外变量用时再定义也便于查找变量,增加代码可读性.2. 对于循环,除非赋值成本比构造和析构成本低且程序对效率高度敏感,将变量定义放在循环内部可以限制变量作用域,增强程序的可理解性和易维护性. 阅读全文
posted @ 2015-08-30 21:49 Reasno 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1. swap是STL的一部分,后来成为异常安全性编程(exception-safe programming)(见条款29)的一个重要脊柱,标准库的swap函数模板定义类似以下:namespace std{ template swap(T& lhs,T& rhs){ T t... 阅读全文
posted @ 2015-08-30 21:30 Reasno 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 1. 通常,将只接受拷贝构造函数声明为explict是一个不错的主意,因为这可以避免自动的隐式类型转换所带来的错误,但有些情况下,使类支持隐式类型转换是可行的,例如自定义的数值类型:class Rational{public: Rational(int numerator=0,int deno... 阅读全文
posted @ 2015-08-30 17:50 Reasno 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 1. 面向对象的真实意义并非是数据以及操作数据的函数应该被捆绑在一起,而是要求数据应该尽可能地被封装.封装意味着数据的不可见,越多的东西被封装,用户对其直接的接触就越少,用户代码和被封装内容的编译相关度就越低,"包裹弹性"就越高,也就是说,封装性越好,对代码的更改所造成的影响就越低.2. non-m... 阅读全文
posted @ 2015-08-30 17:32 Reasno 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 1. 设计类时,应该将成员变量声明为private,尽量避免用户对成员变量的直接访问,使用户只能通过函数接口访问成员,这样利于实现封装,特别是当类需要改变(添加或减少成员变量)时,只需要改变接口实现,对于用户来说只需要重新编译即可(否则类的用户需要修改大量对成员变量进行访问的代码)2. protec... 阅读全文
posted @ 2015-08-25 17:15 Reasno 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 1. 虽然一般情况下传参使用const-by-reference-to-const比较好,但返回值有时必须是对象而不是引用: 当reference绑定到函数内创建的局部对象时,函数调用结束后引用绑定在一个不存在的对象; 当reference绑定到堆内存对象时,函数调用后比较容易忽略内存释放,特别... 阅读全文
posted @ 2015-08-25 17:08 Reasno 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1. 以reference-to-const传递参数的优点: 避免局部对象的构造和析构,节省时间和空间; 避免参数派生类对象向基类对象传递时的"对象切割",实现面向对象;2. reference虽然是"别名",但是底层实现往往是指针,因此对于内置类型,选用pass-by-value效率更高.这也... 阅读全文
posted @ 2015-08-25 16:55 Reasno 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 1. 设计优秀的class是一项艰巨的任务,因为设计好的types是一项艰巨的工作,好的types有自然的语法,直观的语义,以及一个或多个高效实现品.2. 要设计一个良好的class,需要思考以下问题: 1). 新types对象应该如何被创建和销毁? 涉及到构造函数,析构函数,内存分配和释放... 阅读全文
posted @ 2015-08-23 17:20 Reasno 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 1. 好的借口很容易被正确使用,不易被误用.2. "促进正确使用"的方法包括借口的一致性(例如STL容器用于统计大小的函数都名为size)以及与内置类型的行为兼容(例如重载*返回的值应加const限定以防被篡改).3. 阻止误用的办法包括建立新类型,限制类型上的操作,束缚对象值(使用枚举,stati... 阅读全文
posted @ 2015-08-23 16:34 Reasno 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 1. 有些智能指针类(比如shared_ptr)不支持隐式类型转换,假设存在这样两个函数:void fun(shared_ptr lhs,int rhs);int foo();View Code那么对于以下函数调用:fun(new int,foo());将不能通过编译,解决方法之一:fun(shar... 阅读全文
posted @ 2015-08-23 15:28 Reasno 阅读(213) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 下一页