一、内联函数(Inline Functions)
1. 概念
内联函数是一种优化手段。编译器在编译时会将函数的代码直接"内联"插入到调用处,从而避免函数调用时的开销 (如栈帧创建、参数传递、返回地址保存等)。适用于短小且频繁调用的函数。
2. 语法
使用关键字 inline 声明:
cpp
inline int add(int a, int b) {
return a + b;
}
3. 特点
- 编译期行为 :
inline只是对编译器的建议,最终是否内联由编译器决定(如函数体过大或含递归时可能不内联)。 - 头文件中定义 :通常将内联函数定义在头文件(
.h)中,以便多个源文件包含时编译器能看到完整定义。 - 避免重复定义:在头文件中定义非内联函数会导致链接错误,但内联函数允许这样做。
4. 适用场景
- 函数体简短(如1-5行)。
- 被频繁调用(如循环内部)。
5. 示例
cpp
#include <iostream>
using namespace std;
inline void printMessage() {
cout << "Hello, Inline Function!" << endl;
}
int main() {
printMessage(); // 编译时可能被替换为 cout << "Hello, Inline Function!" << endl;
return 0;
}
二、空指针(Null Pointer)
1. 概念
空指针是指不指向任何有效内存地址 的指针。C++11 引入关键字 nullptr 表示空指针,替代传统的 NULL 或 0。
2. 表示方式
cpp
int* ptr = nullptr; // 推荐方式
int* ptr2 = NULL; // 传统方式(不推荐)
int* ptr3 = 0; // 字面量0(易混淆)
3. 作用
-
初始化指针变量,避免"野指针"。
-
作为函数返回值或参数,表示"无指向"。
-
判断指针是否有效:
cppif (ptr == nullptr) { cout << "Pointer is null!" << endl; }
4. 注意事项
-
解引用空指针会导致未定义行为 (程序崩溃):
cppint* ptr = nullptr; *ptr = 10; // 错误!运行时崩溃 -
在类成员函数中,可用空指针检查
this指针是否有效(如某些设计模式)。
5. 示例
cpp
#include <iostream>
using namespace std;
void safePrint(int* ptr) {
if (ptr != nullptr) {
cout << "Value: " << *ptr << endl;
} else {
cout << "Pointer is null!" << endl;
}
}
int main() {
int* p1 = nullptr;
int x = 42;
int* p2 = &x;
safePrint(p1); // 输出:Pointer is null!
safePrint(p2); // 输出:Value: 42
return 0;
}
三、总结
- 内联函数:通过牺牲代码体积减少调用开销,适合短小高频函数。
- 空指针 :用
nullptr明确表示指针无指向,避免解引用引发的运行时错误。
理解这两个概念有助于编写更高效、安全的C++代码。下一步可学习引用 、智能指针等进阶主题。