[英]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.