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