未调用C++构造函数

C++ constructor not called

本文关键字:构造函数 C++ 调用      更新时间:2023-10-16

在下面的代码中,构造函数只被调用一次(即在 Car() 执行时。为什么在语句 Car o1(Car()) 上没有第二次调用它?

#include <stdio.h>
#include <iostream>
class Car
{
public :
   Car()
   {
      std::cout << "Constructor" << 'n';
   }
   Car(Car &obj)
   {
      std::cout << "Copy constructor" << 'n';
   }
};
int main()
{
   Car();
   Car o1(Car()); // not calling any constructor
   return 0;
}
Car o1(Car());

这声明了一个名为 o1 的函数,该函数返回一个Car并接受单个参数,该参数是一个返回Car的函数。这被称为最令人烦恼的解析。

您可以使用一对额外的括号来修复它:

Car o1((Car()));

或者通过在 C++11 及更高版本中使用统一初始化:

Car o1{Car{}};

但是要使其正常工作,您需要将Car构造函数的参数类型设为const Car&,否则您将无法将临时绑定到它。