C++左右值、拷贝构造函数、运算符重载
C++左右值、拷贝构造函数、运算符重载关系图

C++ 核心知识点:引用、运算符重载、左值与右值
一、引用(Reference)
1. 是什么?
引用就是变量的别名,相当于给变量起外号。
int a = 10;
int& b = a; // b 是 a 的引用(别名)
- b 就是 a,不是副本,不是指针
- 操作 b = 操作 a
- 引用必须初始化,不能空引用
- 引用一旦绑定,不能改绑别的变量
2. 常用场景
函数传参(避免拷贝,提高效率)
void func(int& x) { // 引用传参
x = 100; // 直接修改外面的变量
}
3. 引用 vs 指针
- 引用:更安全,必须有值,不能空
- 指针:可以空,可以改指向
二、运算符重载(Operator Overloading)
1. 是什么?
让自定义类/结构体也能用 + - * / == ++ -- [] () 等运算符。
让对象用起来像普通变量一样自然!
2. 最简单例子:重载 +
class Point {
public:
int x, y;
// 重载 + 号
Point operator+(Point& other) {
Point res;
res.x = this->x + other.x;
res.y = this->y + other.y;
return res;
}
};
使用:
Point a{1,2}, b{3,4};
Point c = a + b; // 可以直接 + 了!
3. 常见重载
+ - * /算术运算== != < >比较++ --自增自减[]下标访问=赋值<< >>输入输出
三、左值与右值(Lvalue & Rvalue)
1. 最简单判断方法
- 能取地址 & 的 → 左值
- 不能取地址 & 的 → 右值
int a = 10;
// a 是左值(可以 &a)
// 10 是右值(不能 &10)
2. 定义
- 左值:有名字、有内存、能长期存在的值(变量、对象)
- 右值:临时值、用完就销毁(字面量、临时对象)
int x = 10; // x 左值,10 右值
int y = x + 1; // x+1 是临时值 → 右值
3. 左值引用 & 右值引用
- 左值引用:
int&→ 只能绑左值 - 右值引用:
int&&→ 只能绑右值(C++11 移动语义用)
int a = 10;
int& b = a; // 左值引用 ✔
int&& c = 10; // 右值引用 ✔
🔥 总结
- 引用 = 变量别名,必须初始化,用于高效传参
- 运算符重载 = 让对象能用 +-*/== 等符号
- 左值能取地址,右值是临时值;& 左值,&& 右值
内容由豆包AI辅助编写完成

浙公网安备 33010602011771号