簡體   English   中英

C++ 未調用構造函數

[英]C++ Constructor not been called

我很確定 B(A()) 的調用將在我的代碼中調用 B 的定義構造函數。 但我驚訝地發現它沒有調用我的構造函數 B,當然也沒有打印“Constructor B”。

那么,這段代碼調用了哪個構造函數(它調用的這個構造函數的簽名是什么)?

struct A
{
    
};

struct B
{
    B(const A a) { std::cout << "Constructor B" << std::endl; }
};

int main()
{
    B(A());
    return 0;
}

它沒有像您預期的那樣構造類型為B的 object,因此沒有調用構造函數。

在聲明變量時我們可以在變量名兩邊加上(不必要的)括號,即int (a); int a; . 同樣, B(A()); BA(); ,它聲明了一個名為A的 function ,它不帶參數並返回B

作為解決方法,您可以將()更改為{} ,例如

B(A{});
B{A()};
B{A{}};

居住

暫無
暫無

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

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