簡體   English   中英

為什么。*運算符不能在c ++中重載?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM