《Effective C++》读书笔记(转)

[复制链接]
236|2
手机看帖
扫描二维码
随时随地手机跟帖
keer_zu|  楼主 | 2022-12-14 17:21 | 显示全部楼层 |阅读模式
一、让自己习惯C++
条款01:视C++为一个语言联邦
C++已经是个多重范型编程语言(multiparadigm programminglanguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。
  • C。说到底C++仍是以C为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、数组(arrays)、指针(pointers)等统统来自C。
  • Object-Oriented C++。这部分也就是C with Classes所诉求的:classes(包括构造函数和析构函数),封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)……等等。
  • Template C++。这是C++的泛型编程(generic programming)部分,也是大多数程序员经验最少的部分。templatemetaprogramming(TMP,模板元编程)。
  • STL。STL是个template程序库,看名称也知道,但它是非常特殊的一个。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有极佳的紧密配合与协调,然而templates及程序库也可以其他想法建置出来。


条款02:尽量以const,enum,inline替换#define
“宁可以编译器替换预处理器”比较好,因为或许#define不被视为语言的一部分。
  • 对于单纯常量,最好以const对象或enums替换#defines。
  • 对于形似函数的宏(macros),最好改用inline函数替换#defines。
  • #ifdef/#ifndef也继续扮演控制编译的重要角色。
"the enum hack" 补偿做法。其理论基础是:“一个属于枚举类型(enumeratedtype)的数值可权充ints被使用”。





使用特权

评论回复
keer_zu|  楼主 | 2022-12-14 17:21 | 显示全部楼层
条款03:尽可能使用const
如果关键字 const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。
将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这一类成员函数之所以重要,基于两个理由。第一,它们使 class 接口比较容易被理解。这是因为,得知哪个函数可以改动对象内容而哪个函数不行,很是重要。第二,它们使“操作const对象”成为可能。
两个成员函数如果只是常量性(constness)不同,可以被重载。这实在是一个重要的C++特性。const T& getXXX() const;和T& getWriteableXXX();
利用C++的一个与const相关的摆动场:mutable(可变的)。mutable释放掉non-static成员变量的bitwise constness约束。
利用const_cast将常量性转除,运用const成员函数实现出其non-const孪生兄弟。
  • 将某些东西声明为 const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
  • 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。
  • 当 const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。

使用特权

评论回复
keer_zu|  楼主 | 2022-12-14 17:54 | 显示全部楼层

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1288

主题

12164

帖子

53

粉丝