考慮下面的示例代碼:歧義而重載轉型操作
#include <iostream>
using namespace std;
class dummy
{
private:
int y;
public:
dummy(int b = 0) : y(b) {
}
friend ostream& operator<<(ostream& os, const dummy& obj);
};
ostream& operator<<(ostream& os, const dummy& obj)
{
os << obj.y;
return os;
}
class sample
{
private:
int x;
public:
sample(int a = 0) : x(a)
{
}
operator dummy()
{
dummy d(100);
return d;
}
operator int()
{
return x;
}
};
int main()
{
sample ob1(5);
dummy d;
//d = ob1; //Line1
d = (dummy)ob1; //Line2
cout << d << "\n";
}
在1號線,隱式轉換完成。我明白這種情況下隱式投射是如何工作的。編譯器不提供任何錯誤。
但是在Line2中,sample
對象的顯式類型轉換爲dummy
對象。但編譯器給出了以下錯誤。
error: call of overloaded `dummy(sample&)' is ambiguous
note: candidates are: dummy::dummy(const dummy&)
note: dummy::dummy(int)
問題:
爲什麼發生這些錯誤?
我不明白錯誤信息的含義。爲什麼在錯誤中提到的
dummy
類的候選函數?
[?爲什麼構造不叫給定鑄造運營商(HTTP的可能重複://計算器。 com/questions/6120240/why-constructor-is-not-called-for-given-casting-operator) – iammilind 2012-02-28 05:26:01
誰曾投票結束這個問題並不知道問題的重要性。請看看我問過的問題 – 2012-02-28 05:33:28