[英]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
一正在運行。
您不是在重載賦值運算符,而是在轉換運算符。 因此,它們在轉換發生時被調用。
類的隱式聲明的副本分配運算符采用類型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.