编译器处理赋值语句

编译器怎样处理对象初始化语句中的赋值运算符?
比如初始化变量i int i=0;
与对i赋值 i=1;
这两个赋值运算符应该是不同的,前者能当作后者的重载吗?
T object = other; 这个叫 copy initialization
T object; 这个叫 default initialization
object = other; 这个叫 assignment
1. 基本概念
int i = 0;
是 definition。(定义)
i = 0;
是 assignment。(赋值)
2. Compiler 如何应对 Definition 和 Assignment
Compiler 在看到 Definition 的时候,会在 Stack 或者 Heap 中申请相对应大小的内存,再将 Definition 中规定的 Default Value 写入申请的内存中。
Compiler 在看到 Assignment 的时候,因为 Assignment 的 LHS 一定是一个 lvalue,并且 lvalue 在底层其实就是最初 Define 这个 LHS 对应在 Stack 或者 Heap 中的内存地址,Compiler 通过这个地址把新的 RHS 的值 overwrite 进去,从而实现了值的更改。注意 Assignment 是不需要申请新的空间的
结论:
编译器看到定义语句的时候会申请栈或者堆的内存空间。然后看到赋值语句会把值写入到所申请的内存地址中