這可能是一個微不足道的問題,但我沒有找到滿意的答案,不能真正弄清楚發生了什麼。超載運營商=
假設你有下面的代碼:
#include <iostream>
class Foo
{
public:
void operator=(int)
{
std::cout << "calling Foo::operator=(int)" << std::endl;
}
};
int main()
{
Foo a, b;
a = 10; // it works, of course, no questions here
a = b; // why does this work?
}
由於我在Foo
超載operator=
,我希望行a = b
內main()
吐編譯器錯誤(即a.operator=(b)
不應該編譯,因爲有沒有從b
到int
的隱式轉換,後者是輸入類型Foo::operator=(int)
)。爲什麼分配a = b
默默地工作,究竟發生了什麼?編譯器是否會產生一個「默認」operator=(const Foo&)
,即使在我重載它的情況下?
謝謝,看來你知道標準:)你有一秒鐘。數? – vsoftco 2014-10-31 02:05:25
如果存在顯式聲明的移動構造函數或移動賦值運算符,則隱式聲明的複製賦值運算符也將被定義爲刪除。 – Brian 2014-10-31 02:05:31
@布萊恩,謝謝,我知道,對於賦值運算符只是好奇心。似乎有點奇怪,不能爲重載操作符指定「顯式」。這可能很有用,特別是在處理代理對象時。 – vsoftco 2014-10-31 02:08:51