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

时间:2017-12-14 07:00:05

标签: 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;
}

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

感谢。

1 个答案:

答案 0 :(得分:5)

  

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

没有

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

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

  

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

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