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、引用、无默认构造的成员必须初始化,不能赋值
posted @ 2023-07-03 21:22  CodeMagicianT  阅读(410)  评论(0)    收藏  举报