在对象实例化时,c ++如何分离声明和构造函数调用?

UnS*_*Sat 1 c++

class C {  
public:  
    int i = 0;  
    C() {i++;}  
};

int main()  
{
    C c;  
    // This simple statement could be interpreted something like,            
    // C c;  --> declaration                                                                                                                                                              
    // C::C(&c); -> constructor call                                                                                                                                                      
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题以下是:
1)编译器是否真的进行了这种转换?
2)如果是,有没有办法看到这些转变?

谢谢.

iBu*_*Bug 5

1)编译器是否真的进行了这种转换?

没有.

首先,它不是声明.这是定义.根据定义,使用其构造函数之一立即初始化类实例.

编译器不会将定义"转换"为声明和构造函数调用.这正是定义所包含的内容.在预处理时,定义保留为定义.在编译时,它被编译成一系列指令,为实例分配空间并调用构造函数.

2)如果是,有没有办法看到这些转变?

不可以.您只能在汇编代码中观察构造函数调用,您可能不想查看它.