"C++primerplus学习笔记"
C++ Primer Plus是一本深入学习C++编程语言的书籍,本学习笔记主要涵盖了第8章“函数探幽”的核心内容,包括内联函数和引用变量。
### 8.1 C++ 内联函数
内联函数是为了优化程序性能而设计的。在常规函数调用中,程序需要跳转到函数体执行,执行完毕后再返回原调用位置,这种跳转过程消耗了一定的时间。内联函数通过将函数体插入到每个调用点来消除这种开销,从而节省了时间。然而,这可能会增加程序的内存占用,因为每个调用点都有函数体的副本。内联函数的使用通常适用于执行时间短、频繁调用的函数。
内联函数的声明和定义可以通过在函数声明或定义前添加`inline`关键字来实现。有时,为了简洁,可以直接在应该放置函数原型的地方提供函数定义,省略原型。
### 8.2 引用变量
引用是现有变量的一个别名,它不创建新的存储空间,而是直接绑定到已存在的变量上。引用的主要用途是在函数调用中传递参数,允许函数直接操作原始数据,而非副本,这对于处理大型数据结构特别有用。
#### 8.2.1 创建引用变量
创建引用变量时,需要在声明时就将其初始化,例如:
```cpp
int rats;
int& rodent = rats;
```
#### 8.2.2 引用作为函数参数
通过引用传递参数可以使函数修改调用函数中的变量,如`swap`函数所示,它可以交换两个变量的值:
```cpp
void swap(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
```
#### 8.2.3 引用的属性和特别之处
1. 如果只想让函数读取实参而不改变,可以使用按值传递或const引用传递。
2. 引用不能绑定到表达式上,只能绑定到变量。
3. 当实参类型与引用参数类型不匹配但可以转换时,会创建一个临时变量,然后传递对这个临时变量的引用。
#### 8.2.4 结构与引用
引用也可以用于结构或类,避免了结构复制的开销,如:
```cpp
struct free_throws {
std::string name;
int made;
int attempts;
};
// 使用引用作为参数
void print_stat(const free_throws& ft) {
// ...
}
```
C++的内联函数和引用都是为了提高程序效率而设计的工具。内联函数通过减少函数调用的开销提升速度,而引用则提供了更高效的数据传递方式,特别是在函数参数传递和处理复杂数据结构时。理解并适当地使用这两个特性对于编写高效、优化的C++代码至关重要。