简略来说,编译器会对初始化列表按照成员变量的声明顺序重新一一排序,安插到构造函数中进行初始化操作,而且这些初始化操作在构造函数里面用户自己定义的任何代码之前。
下面是c++源码:
class X { int main() { |
下面是main函数里面的汇编码:
; 13 : int main() { push ebp ; 14 : X x; lea ecx, DWORD PTR _x$[ebp];将对象x的首地址传递给寄存器ecx,作为隐含参数传递给构造函数(即this指针) ; 15 : } xor eax, eax |
下面是构造函数的汇编码:
??0X@@QAE@XZ PROC ; X::X, COMDAT ; 8 : X() : j(1), i(2), l(3) { push ebp ; 9 : k = 4; mov eax, DWORD PTR _this$[ebp];将对象首地址给寄存器eax ; 10 : } mov eax, DWORD PTR _this$[ebp] |