參考https://bbs.csdn.net/topics/396949997
有一個類
class MyArry
在類的內部重載
MyArry& MyArry::operator=(const MyArry& arry);
但是
1 MyArry arry1(10);//調用構造方法實例化對象
2 MyArry arry2;//聲明一個變量
3 arry2 = arry1;//調用了重載的“=”
4 MyArry arry3 = arry2;//調用了拷貝構造方法
在第4行中調用的並不是重載後的=
原因是 MyArry arry3 = arry2;執行過程中 arry3 還不能代表一個對象,而MyArry& MyArry::operator=(const MyArry& arry);的調用需要的兩個參數都是MyArry 的對象。
如下圖,聲明過程中是沒有辦法調用
那麼爲什麼聲明過程中不能調用,但是聲明完以後能調用呢?
那是因爲,聲明過程實際上是調用呢無參構造函數,無參構造函數或生成一個對象;而在調用完成之前是沒有返回對象
看下下面的運行過程:
執行中,沒有產生對象;
執行完產生了對象
執行中沒有對象,所以也就不能調用operator=
總結:
1、A a1 = b;調用的是拷貝構造,不是operator=;原因是執行=號時左側還沒產生A 對象;
2、操作符重載一定要分析操作符的參數