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)如果是,有没有办法看到这些转变?
谢谢.
1)编译器是否真的进行了这种转换?
没有.
首先,它不是声明.这是定义.根据定义,使用其构造函数之一立即初始化类实例.
编译器不会将定义"转换"为声明和构造函数调用.这正是定义所包含的内容.在预处理时,定义保留为定义.在编译时,它被编译成一系列指令,为实例分配空间并调用构造函数.
2)如果是,有没有办法看到这些转变?
不可以.您只能在汇编代码中观察构造函数调用,您可能不想查看它.