默认构造函数和析构函数是否内联?

Jos*_*vin 9 c c++ inline abi binary-compatibility

我很好奇编译器生成的默认构造函数和析构函数是否内联,因为我可以证明它是正确的.一方面,您希望默认构造函数/析构函数不是内联的,以便稍后添加它们不会破坏ABI(因为只有默认值时编译的目标文件才会内联生成的定义而不是您定义的定义).另一方面,对于C++编译器来编译与使用C编译器编译时相同的C代码,它不能为每个分配的结构添加构造函数/析构函数调用,而在C++中,类的唯一功能区别是并且结构应该是默认的访问保护.也许链接器以某种方式解决这个问题 也许答案因编译器而异?

这个问题的结果是:如果我在C++中有一个POD结构,理论上我可以通过自己定义空内联构造函数/析构函数代替默认值来获益吗?

Cub*_*bbi 19

C++标准在12.1 [class.ctor]/5中说

隐式声明的默认构造函数是其类的内联公共成员

12.4 [class.dtor]/3中

隐式声明的析构函数是其类的内联公共成员.