没有调用C++构造函数

Din*_*esh 4 c++ class

在下面的代码中,构造函数只在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;
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 12

Car o1(Car());
Run Code Online (Sandbox Code Playgroud)

这声明了一个调用的函数o1,它返回一个Car并且接受一个参数,该函数返回一个函数Car.这被称为最令人烦恼的解析.

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

Car o1((Car()));
Run Code Online (Sandbox Code Playgroud)

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

Car o1{Car{}};
Run Code Online (Sandbox Code Playgroud)

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