簡體   English   中英

未調用 C++ 構造函數

[英]C++ constructor not called

在以下代碼中,構造函數僅在 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&的參數類型設為const Car& ,否則您將無法將臨時對象綁定到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM