在以下代码中,构造函数仅在执行 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
的函数。这被称为 most-vexing parse .
您可以使用一对额外的括号来修复它:
Car o1((Car()));
或者在 C++11 及更高版本中使用统一初始化:
Car o1{Car{}};
但要让它工作,你需要将 Car
构造函数的参数类型设为 const Car&
,否则你将无法绑定(bind)暂时的。
关于未调用 C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21879343/