📜  C++默认构造函数|内置类型

📅  最后修改于: 2021-05-25 18:28:54             🧑  作者: Mango

预测以下程序的输出?

#include 
using namespace std;
  
int main() {
  
   cout << int() << endl;
   return 0;
}

没有任何参数或每个参数都具有默认值的构造函数将被视为default构造函数。有需要时,它将由编译器调用(精确地将根据需要为默认构造函数生成代码)。

C++甚至允许内置类型(原始类型)具有默认构造函数。函数样式强制转换为int()类似于将0强制转换为所需类型。程序在控制台上打印0。

本文的初始内容引发了许多讨论,以下是合并。

值得认识C++中的引用vs.值语义以及Plai n Old Data类型的概念。在Wiki中,原始类型和POD类型没有用户定义的副本分配运算符,没有用户定义的析构函数,也没有本身不是POD的非静态数据成员。而且,POD类必须是一个聚合,这意味着它没有用户声明的构造函数,没有私有或受保护的非静态数据,没有基类,也没有虚函数。

C++的创建者摘录(摘自邮件注释),“我认为您将’实际的构造函数调用’与概念上的构造函数混为一谈。内置类型被认为具有构造函数。

上面提到的int()代码段在概念上被认为具有构造函数。但是,将不会生成任何代码来进行显式构造函数调用。但是,当我们观察程序集输出时,将使用值语义生成代码以初始化标识符。有关更多详细信息,请参阅本文档的第8.5节。

感谢Prasoon Saurav发起了讨论,提供了各种参考资料并纠正了我的理解中的空白。

参考:

  1. C++编程语言3e。
  2. 最新的C++标准–工作草案第8.5节。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”