簡體   English   中英

分配運算符重載

[英]Assignment operator overload

我有分配給string運算符的類。

class turbo
    {
public:
    operator string   (void) {printf("assignment to string operator\n");return "bla2";}
    };

分配操作可以正常工作:

turbo t;
string s;
s=t;

而且我在輸出中有"assignment to string operator"的信息。

然后我決定讓另一個賦值運算符來turbo

class turbo
    {
public:
    operator string   (void) {printf("assignment to string operator\n");return "bla";}
    operator turbo   (void) {printf("assignment to turbo operator\n");return *this;}
    };

但是下面的代碼不會調用turbo賦值運算符。

turbo t;
turbo tt ;
tt=t;

為什么?

我知道我可以重載=運算符,但我也希望運算符能turbo工作,因為string一正在運行。

您不是在重載賦值運算符,而是在轉換運算符。 因此,它們在轉換發生時被調用。

參見c ++:強制轉換運算符與分配運算符與轉換構造函數優先級

類的隱式聲明的副本分配運算符采用類型X const& (此處為turbo const& )的單個參數。 由於您的RHS操作數已經是turbo類型的,因此無需調用轉換函數。

實際上,永遠不會隱式調用到相同類型的轉換函數。 它只能被顯式調用(如turbo::operator turbo() ),也可以通過基類中的虛擬轉換函數來調用。 這在[class.conv.fct]中進行了討論:

1-從未使用轉換函數將(可能具有cv限定)對象轉換為(可能具有cv限定)相同對象類型(或對其的引用),轉換為(可能具有cv限定)該類型的基本類(或對其的引用),或無效的(可能經過cv限定)。 [...]

請參閱在什么情況下將調用類型的轉換操作符?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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