现在的位置: 首页 > 综合 > 正文

《Effective_C++》读书笔记4

2013年11月03日 ⁄ 综合 ⁄ 共 1453字 ⁄ 字号 评论关闭

条款21、必须返回对象时,别妄想返回其reference。
1)觉不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。

条款22、将成员变量声明为private
1)切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供class作者以充分的实现弹性。
2)protected并不比public更具封装性

条款23、宁以non-member、non-friend替换member函数
1)宁可拿non-member、non-friend替换member函数。这样可以增加封装性、包裹弹性和机能扩充性

条款24、若所有参数皆需要类型转换,请为此采用non-member
1)如果你需要为某个函数的所有参数(包括被this指针指的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member

条款25、考虑写出一个不抛异常的swap函数
1)当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常。
2)如果你要提供一个member swap,也提供一个non-member swap用来调用前者。对与class(而非templates),也请特化std::swap。
3)调用swap时应针对std::swap使用using声明式,然后调用swap并且不带任何“命名空间资格修饰”。
4)为“用户定义类型”进行std templates全特化是好的,但是千万不要尝试在std内加入某些对std而言全新的东西。

条款26、尽可能延后变量定义式的出现时间
1)尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。

条款27、尽量少做转型动作
1)如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast。(如果有个设计需要转型动作,试着发展不需要转型的替代设计)
2)如果转型是必要的,试着将它隐藏于某个函数背后。可以随后可以调用函数,而不需要将转型放进他们自己的代码内。
3)宁可使用C++-style转型,不要使用旧式转型。前者很容易辨识出来,而且也比较有着分门别类的职掌。

条款28、避免返回handles指向对象内成分
1)避免返回handles(包括references、指针、迭代器)指向对象内部。蹲守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handles)可能性降至最低。

条款29、为“异常安全”而努力是值得的
1)异常安全函数,即使发生异常也不会泄漏资源或者允许任何数据结构败坏。这样的函数分为三中可能的保证:基本型、强烈型、不抛异常型。
2)“强烈保证”往往能够以copy-and-swap实现出来,但是“强烈保证”并非对所有函数都是可实现或具备现实意义。
3)函数提供的“异常安全保证”通常最高只等译其所调用之各个函数的“异常安全保证”中的最弱者。

条款30、透彻了解inlining的里里外外
1)将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进升级更容易,也可是潜在的代码膨胀问题最小化,是程序的速度提升机会最大化。
2)不要只因为function templates 出现在头文件,就将他们声明为inline.

抱歉!评论已关闭.