Effective C++学习---05.实现

条款26:尽可能延后变量定义式的出现时间

  • 程序控制流到达变量定义式时,有构造成本;当变量离开作用域时,有析构成本;
  • 减少无意义的default构造行为,定义一个变量的时候,最后给它一个初始值;
  • 对于循环语句,除非明确1:赋值成本比构造析构成本低;2:正在处理代码中效率高度敏感的部分,使用方法A,否则使用方法B
class Widget;

//方法A:定义于循环外,代价一次构造,一次析构,n次赋值
//同时在该方法中w的析构被延迟了
Widget w;
for(int i = 0; i < n; ++i)
{
    w = 取决于i的某个值;
}

方法B:定义于循环内,代价n次构造,n次析构
for(int i = 0; i < n; ++i)
{
    Widget w(取决于i的某个值);
}

条款27:尽量少做转型动作

  • const_cast用来去除对象的常量性
  • dynamic_cast用来决定某对象是否归属继承体系中的某个类型(运行时判断)
  • reinterpret_cast执行低级转型,实际实现与编译器相关(因此不可移植)
  • static_cast强迫执行隐式转换(编译期判断)
  • 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast。如果有个设计需要转型动作,试着更换为无需转型的替代设计
  • 如果转型必要,试着将它隐藏到某个函数后面,客户调用该函数接口,而无需将转型操作放进自己的代码中

条款28:避免返回handles(指针、引用和迭代器)指向对象内部成分

  • 避免返回handles指向类对象的内部(不管返回参数是否用const修饰),因为一旦类对象提前被释放,那么返回的handles就悬空了

条款29:为“异常安全”而努力是值得的

  • 异常安全函数需要满足的条件:1.不泄露任何资源;2.不允许数据败坏;
  • 异常安全函数的级别:
  1. 基本承诺:如果异常被抛出,需要保证所有对象都保持在有效状态下,所有对象都处于内部前后一致的状态(所有有约束条件的对象在抛出异常前后,约束条件仍然满足,但不完全保证抛出异常后对象的状态与抛出异常前一致,也就是某些对象的状态可能发生变化了,只要所有对象的状态合法即可)
  2. 强烈保证:如果异常抛出,所有对象状态不改变。也就是一旦抛出异常,所有对象恢复到调用函数之前的状态(往往可以以copy-and-swap实现,但是“强烈保证”并非对所有函数都可实现或具有现实意义)
  3. 不抛出异常:意味着函数保证能够完成承诺的功能,但是不意味着函数不会抛出异常,此时一旦抛出异常,就意味着严重错误
  • 函数提供“异常安全保证”的级别通常最高只等于该函数中所有调用函数的“异常安全保证”的最弱者(木桶原理)

条款30:透彻了解inlining的里里外外

  • 将大多数inlining限制在小型、被频繁调用的函数身上
  • 不要只因为function templates出现在头文件中,就将它们声明为inline

条款31:将文件间的编译依存关系降至最低

  • 如果使用对象引用或对象指针可以完成任务,就不要使用对象本身(这样在头文件中只需要使用class声明类,而不需要包含该类的头文件)
  • 如果能够,尽量以类声明替换类定义式
  • 为声明式和定义式提供不同的头文件
  • 两种手段Handle classes(1类提供实现,2类提供接口,在2类相关实现中调用1类的接口)和Interface classes(父类提供抽象接口,子类提供实现,同时父类提供工厂接口,这样可以通过父类的接口调用相关函数)
  • 程序库头文件应该以“完全且仅有声明式”的形式存在

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《Effective C++ 中文版》是由Scott Meyers所编写的一本关于C++编程的指南。它不仅是C++编程者的必备书籍,也是所有编程人员的经典读物。本书在讲解C++编程过程中,给出了许多实用的技巧和建议,帮助程序员更好地使用C++编写高效、可靠的程序。 本书共包含50个条款,每个条款都包含一个具有实际意义的问题和解决方案。这些解决方案是作者多年编写C++代码的经验总结,结合了C++的最佳实践,旨在帮助读者更好地理解C++语言特性和语言使用习惯。这些技巧从简单到复杂,由浅入深地介绍了如何编写高效的C++代码。 在本书中,你将学习到: 1. 内存管理技巧。包括如何使用智能指针、如何处理内存泄漏问题等。 2. 类设计和继承技巧。包括如何设计和实现抽象基类、虚函数等。 3. 异常处理和错误处理。包括如何处理异常、如何正确使用异常、如何进行错误处理等。 4. 代码优化和调试技巧。包括如何做好代码优化、如何进行调试、如何实现高效数据结构等。 《Effective C++ 中文版》不仅适用于初学者,也适合有一定经验的C++开发人员参考。它是一本非常实用的、能帮助你更好地理解和掌握C++编程技巧的书籍。无论你是一名编程新手还是有多年经验的专业开发人员,都值得一读。 ### 回答2: 《Effective C++ 中文版》是一本关于C++编程的经典书籍。其中包含了许多有关C++编程的实用技巧,以及注意事项和最佳实践。本书的作者Scott Meyers是一位著名的C++专家,通过本书他在编程技巧和C++语言语法方面给我们提供了很多宝贵的经验。本书主要分为50个章节,每一个章节有自己的主题,涉及面非常广泛,包括了一些比较基础的C++概念,以及一些高级的编程技巧和设计模式的应用。其中一些章节是非常值得注意的,比如说有关内存管理,函数重载以及类设计等等。 通过《Effective C++ 中文版》这本书,读者可以学到很多C++编程的实用技巧,这些技巧在实际开发中非常有用。例如,书中介绍了如何正确使用函数重载,如何避免内存泄漏以及如何正确地设计类等等。此外,这本书对于大家掌握C++的语法和一些编程技巧以及习惯养成等方面也是非常有帮助的。因此,《Effective C++ 中文版》是一本非常值得阅读的C++经典之作,对于C++初学者和专业程序员都是有益的。 ### 回答3: 《Effective C》是一本关于C语言编程的实用指南,旨在帮助读者更加高效地使用C语言进行开发。本书作者为Scott Meyers,是知名的C++编程之父,在本书中他分享了自己多年来在C语言领域的经验和技巧。 本书主要分为四个部分,分别是基础知识、指针、内存管理和高级技巧。第一部分主要介绍C语言的基本语法和特性,包括编码风格、数据类型、流程控制等;第二部分则深入讲解指针的概念和用法,包括指针的语法、指针和数组、指针和函数等;第三部分主要涉及内存管理方面的知识,包括动态内存分配、内存泄漏、内存地址等;第四部分则介绍一些高级技巧,如位操作、函数指针、字符串操作等。 本书着重强调了C语言的“低级别”特性,如指针和内存管理,这正是C语言的优越之处。但同时,这些特性也是导致C语言存在一些常见问题的根源,如内存泄漏、野指针等。因此,本书特别注重这些问题的防范和解决方法,为读者提供了很多实用的技巧和建议。 总之,《Effective C》是一本非常实用和有价值的C语言编程指南。无论是新手还是经验丰富的程序员,都可以从本书中学到很多东西,提升自己的编程水平和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值