2
C++ 基础增强:让代码又短又安全
References · const · auto · nullptr
C++ 在 C 的地基上加了一堆"语法糖和安全垫"。这一章全是现代 C++ 的高频小特性,每一个都短,但组合起来能让代码清爽一大截。
引用 &:变量的别名
引用(reference)就是给变量起个外号,外号和本尊是同一个人,不是指针(不需要解引用,也不能为空)。函数想用"传地址"的效果,用引用比指针干净。
引用 vs 指针:交换两个数
// 用引用:不用写 & 和 *,干净利落
void swap(int& a, int& b) { // a、b 是外面变量的别名
int t = a; a = b; b = t;
}
int x = 1, y = 2;
swap(x, y); // 直接传变量,不用取地址,外面真的换了
const:承诺"我不改它"
| 写法 | 含义 |
|---|---|
const int x = 5; | x 是常量,不能改。 |
const int& r = x; | 通过 r 只读,不能改 x。传大对象进函数时最爱用,避免拷贝又不改它。 |
void f() const; | const 成员函数:承诺这个成员函数不会修改对象。 |
现代小特性合集
auto / constexpr / nullptr / 范围 for / 结构化绑定 / 统一初始化
#include <vector>
#include <utility>
constexpr int N = 5; // 编译期常量,比 #define 安全(有类型)
int main() {
auto a = 3.14; // auto:让编译器自己推类型,a 推成 double
int* p = nullptr; // nullptr:类型安全的空指针,比 NULL 好(NULL 其实是个 0)
std::vector<int> v = {1, 2, 3}; // 花括号统一初始化
for (auto& x : v) { // 范围 for:直接遍历,不用下标
x *= 2;
}
// 结构化绑定(C++17):一次解包一个 pair/tuple
auto [first, second] = std::pair<int, double>{1, 2.5};
}
记auto 用还是不用
auto 不是"偷懒随便用"。它在类型名又长又臭时(迭代器、lambda、模板)能救命;但在关键业务数字上写出来会让人看不清类型。原则:类型一眼能看明白就写出来,类型写出来很长就用 auto。