29.初始化和赋值的区别
29.初始化和赋值的区别
一句话核心
- 初始化是对象诞生时赋初值,调用构造函数,只一次
- 赋值是对象已存在后修改值,调用 operator=,可多次
- const、引用、无默认构造的成员必须初始化,不能赋值
1. 定义区别
初始化
在创建变量 / 对象的同时赋予初值。
- 构造函数执行
- 只发生一次
int a = 10; // 初始化
int b(20); // 初始化
A x(3); // 调用构造函数,初始化
赋值
对象已经存在后,用 = 修改内容。
- 调用 operator=(赋值运算符)
- 可以执行多次
a = 20; // 赋值
x = A(5); // 赋值
2. 对类对象的关键区别
A x(1); // 初始化 → 调用构造函数
x = 2; // 赋值 → 调用赋值运算符重载
- 初始化:构造对象 + 设值
- 赋值:清理旧值 + 拷贝新值
3. 有些场景只能初始化,不能赋值
这些情况必须在对象诞生时就给定值:
const成员变量- 引用成员
& - 没有默认构造函数的对象成员
必须写在初始化列表里,不能在函数体内赋值。
class A {
const int c;
int& r;
public:
A(int& x) : c(10), r(x) {} // 必须初始化
};
4. 性能区别
- 初始化:一步到位
- 赋值:先构造,再覆盖,多一次开销
所以 C++ 提倡尽量初始化,少赋值。
最终背诵版
- 初始化是对象诞生时赋初值,调用构造函数,只一次
- 赋值是对象已存在后修改值,调用 operator=,可多次
- const、引用、无默认构造的成员必须初始化,不能赋值

浙公网安备 33010602011771号