POD和用户定义数据类型之间的区别有多大?

Vik*_*kas 4 c++ new-operator

第一:

int *p = new int;
Run Code Online (Sandbox Code Playgroud)

第二:

class A{};

A *pa = new A;
Run Code Online (Sandbox Code Playgroud)

new和编译器如何确定何时调用构造函数?在第一种情况下,编译器不生成调用p的构造函数的代码,在第二种情况下,它生成代码来调用A的构造函数.使用哪种机制进行这样的选择?

unq*_*ind 7

编译器知道A是一个类,因为它已经看到了类声明,所以它使用了合成的默认构造函数.它知道int是一个int,因为语言语法就是这样.


Arm*_*yan 6

在你的情况下,A也是POD.要了解POD的正确定义来看看这个.

就代码而言,编译器知道int是内置类型,并且没有任何构造函数.

编辑:你的问题很奇怪.编译器知道哪个类型是一个pod,哪个不是,也知道哪个是内置的,而不是内置的,因为它是编译器编译你的代码:)如果编译器不知道那些信息,谁将?