书名为《Effective C++》, 博客地址无法解析++,故命名为CPP
第一章 让自己习惯C++
1. 视 C++为一个语言联邦
View C++ as a federation of languanges.
今天的C++是一门多范式编程语言,同时支持过程式、面向对象、函数式、泛型和元编程特性。这种能力和灵活性使C++成为无可比拟的工具,但也会引起一些混乱。
把 C++ 看作由众多次语言“联邦”而来
- C++ 的C语言部分
- C++ 的面向对象部分
- C++ 的模版部分
- C++ 的 STL 部分
2. 尽量使用 const enum inline 替换 # define
Prefer consts, enums, and inlines to # defines
优先选择编译器替换预处理器
解决的方法是使用下面的代码:
1 | const double AspectRatio = 1.653; // 全大写通常用于宏,因此需要修改命名方式 |
存在两种特殊情况:定义常量指针、class 专属常量
定义常量指针
由于常量定义式通常被放在头文件中,因此有必要将指针声明为const。
1 | // #define AUTHORNAME "Scott Meyers" |
上述代码语句 2 中,
- **
const char *
**:指向字符的指针,指针指向的内容是常量,因此不能通过指针修改字符串内容。 const
(第二个):修饰指针本身,表示指针authorName
不能指向其他地址。
class 专属常量
这一部分没怎么看懂
为了使常量的作用域限制在 class 中,必须让他成为 class 的一个成员;同时为了确保此常量至多只有一份实体,必须定义为 static 成员,如下面的代码:
1 | class GamePlayer { |
C++中常量式与定义式的区别:
- 常量式是指在编译时可以确定其值的表达式,值在程序运行期间不会改变,可以用于初始化常量、数组大小、模板参数等。
- 定义式是指声明并分配存储空间的语句。定义式不仅声明了变量或函数的类型,还为它们分配了存储空间(对于变量)或提供了函数的实现(对于函数)。
通常,C++要求为所使用的任何东西提供定义,但类专用的静态整数类型(例如integer、char、
bool)常量是个例外。只要不获取它们的地址,就可以在不提供定义的情况下声明并使用它们。
形似函数的宏,使用 inline 替换
1 |
|