未调用 C++ 构造函数

标签 c++ class

在以下代码中,构造函数仅在执行 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/

相关文章:

c++ - 为什么我不能通过模板参数声明一种类型的友元函数但可以使用别名

javascript - 如何向 ES6 javascript 类添加 mixins?

php - 使用设备对象的 PHP 类

c++ - 在类中使用 vector 创建类

c++ - 是否可以使控制台输出为 RTL(从右到左)?

c++ - 包含 DirectXTex.h 时出错

c++-default_random_engine 始终创建相同的数字系列

c++ - 使用一个大包含文件的优点/缺点

python - 重新评估/更新在 Python 中作为类变量传递的条件表达式的真值的最佳方法

objective-c - 每个 .swift 文件不应该是一个类吗?