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;     // 右值引用 ✔

🔥 总结

  1. 引用 = 变量别名,必须初始化,用于高效传参
  2. 运算符重载 = 让对象能用 +-*/== 等符号
  3. 左值能取地址,右值是临时值;& 左值,&& 右值

内容由豆包AI辅助编写完成

posted @ 2026-04-02 13:20  道长不姓王  阅读(9)  评论(0)    收藏  举报