超載我似乎與我的運營商被調用我的C++程序的順序一個奇怪的問題,我已經創建了一些運營商根據自己的論點,即拋出異常類:發行與運營商在C++
class Variant
{
public:
..stuff..
Variant(int data) {..stuff..}
operator int() throw(...)
{
if(type == 0)
return value;
else
throw 0;
}
Variant operator +(Variant &v) throw(...)
{
Variant res;
if(type == 2) {
res.value = v.value;
res.svalue = v.svalue;
..stuff..
else
throw 0;
res.type = type;
}
return res;
}
Variant operator *(Variant &v) throw(...) {..stuff..}
}
..stuff..
int res1;
Variant res, res2;
..stuff..
// try {
if(res1 < 0)
問題在於,在下一行Variant :: int()轉換操作符在變量res上被調用,並引發異常,即使所有操作數都是Variant,我們也不會調用Variant :: +操作符。可以看到)
res = res + Variant(res1) * res2;
else
鑑於在這下一行上正確的Vari螞蟻:: +運營商被調用,一切都很好
res = res + res2;
// } catch (...) {
// error = "Invalid operator";
// isok = false;
//
我只注意到乾脆把乘法在臨時Variant變量(如tempv =變(RES1)* RES2)分兩步工作做,但我不明白爲什麼。 } 任何人都可以建議什麼會導致編譯器嘗試並自動轉換爲int?我缺乏運營商或其他什麼?
請粘貼顯示錯誤的最小**完整** C++程序。請參閱http://SSCCE.org瞭解更多信息。 – 2013-03-13 19:11:52