[英]Overloading '->' member access operator
在重載operator*
我們執行以下操作:
T & operator * () { return *ptr; }
這意味着如果我有:
SmartPtr<int> obj(new int());
*Obj = 20;
Cout << *obj;
然后,將*obj
部分替換為*ptr
,使其與以下各項一樣好:
*Ptr=20
cout<<*ptr
現在,在重載operator->
同時,我們執行以下操作:
T * operator -> () { return ptr; }
可以通過以下方式訪問:
Obj->myfun();
我在這里不了解的是在評估obj->
之后將其替換為ptr
因此它應如下所示:
ptrmyfun(); // and this is syntax error
我要去哪里錯了?
C ++不能像在文本編輯器中搜索/替換一樣工作。 “ obj1->”不會被逐字記錄所代替,就像這是文本文件中的一行文本一樣。
附:
Obj->myfun();
->
運算符調用返回ptr
的自定義運算符的事實:
T * operator -> () { return ptr; }
這並不意味着原始的聲明會以某種方式變為
ptrmyfun();
好像“ Obj->”被“ ptr”代替。 C ++根本無法以這種方式工作,就像在文本編輯器中進行搜索/替換一樣。
->
運算符導致調用自定義operator->()
。 您了解操作員重載工作原理的那一部分是正確的。
但是發生的是,簡單地,來自operator->
()的返回值變成了實際指針取消引用所應用於的實際指針值。
因此,這基本上變成了:
ptr->myfun();
就這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.