[英]Why .* operator can not be overloaded in c++?
我發現這里的一些帖子討論了運算符重載和運算符,它們不能像c ++一樣重載.
::
.*
sizeof
等。 但我不能了解為什么要具體細節或理由.*
避免? 你們中的很少人可能會把它作為重復投票,但如果我得到關於我想要的那些鏈接的詳細信息,我會非常高興:)
從馬的口中 :
運營商
.
(dot)原則上可以使用與 - >相同的技術重載。 但是,這樣做會導致對操作是否意味着對象重載的問題.
或者提到的對象.
例如:
class Y {
public:
void f();
// ...
};
class X { // assume that you can overload .
Y* p;
Y& operator.() { return *p; }
void f();
// ...
};
void g(X& x)
{
x.f(); // X::f or Y::f or error?
}
這個問題可以通過幾種方式解決。 在標准化的時候,哪種方式最好是不明顯的。
AFAIU同樣的理由適用.*
如果通過運算符函數調用的內部機制,這很容易理解。
說一個類Complex
可以有兩個成員; r
表示真實部分, i
表示虛部。 例如:
Complex C1(10,20),C2(10,2) // we assume there is an already a two argument constructor within class.
現在,如果您將C1+C2
作為語句編寫,編譯器會嘗試在復數上找到+
運算符的重載版本。 如果重載+
運算符,那么C1+C2
在內部翻譯為c1.operator+(c2)
。
但你會翻譯什么超載.
運營商? 例如:
C1.disp()//display content of a complex object
現在嘗試提出C1.operator.(------)
的內部表示C1.operator.(------)
。 鑒於這種語法會修改它自己的語義含義,結果是無可救葯地混亂。 因為這個原因超載了.
不被允許。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.