【问题标题】:C++ constructor not called未调用 C++ 构造函数
【发布时间】:2014-02-19 11:38:02
【问题描述】:

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

【问题讨论】:

  • o1 是一个函数声明。
  • 这似乎是正确的

标签: c++ class


【解决方案1】:
Car o1(Car());

这声明了一个名为o1 的函数,它返回一个Car,并接受一个返回Car 的函数的参数。这被称为most-vexing parse。

您可以通过使用额外的括号来修复它:

Car o1((Car()));

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

Car o1{Car{}};

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

【讨论】:

  • 我刚被重定向到这篇文章,请问如果我用Car(Car(Car())) 调用它,它根本没有调用任何构造函数,是什么让它在这种情况下混淆?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多