C++的拷貝構造函數爲什麼參數是const Test& s?
參考:https://blog.csdn.net/TanJiaLiang_/article/details/86691437
1.Test(Test s)爲什麼不行?
因爲我們拷貝構造函數的參數Test s調用的也是拷貝構造函數,所以這樣調用必然造成無窮無盡的遞歸調用,所以我們必須加引用&
2.爲什麼要加const?
拿對象作爲返回值會調用拷貝構造函數
Test show(void)
{ return Test(20); }
Test t = show(); //調用拷貝構造函數
首先我們得知道,返回一個局部變量是通過一個臨時的變量返回,對象也不例外,這裏也會產生一個臨時的對象,而這個臨時對象,具有常性,也就是const,不可被修改,賦值之後臨時對象也就消亡了,這個臨時對象,具有const常性,所以當我們把const加上,通過嚴格的參數匹配,編譯器才能找到我們的const Test& s版本的拷貝構造函數。
如何禁止拷貝構造函數
將該類的拷貝構造函數設置爲private,或者定義一個基類,將基類的拷貝構造函數設置爲private。
具體參考: