我的 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)
问题是,在下一行中,变量 res 上调用 Variant::int() 强制转换运算符并引发异常,并且即使所有操作数都是 Variant,就我所见,Variant::+ 运算符也永远不会被调用)
res = res + Variant(res1) * res2;
else
而在下一行,正确的 Variant::+operator 被调用,一切都很好
res = res + res2;
// } catch (...) {
// error = "Invalid operator";
// isok = false;
//
我刚刚注意到,只需将乘法放在一个临时变量变量中(如 tempv = Variant(res1) * res2)并分两步进行即可,但我不明白为什么。谁能建议什么会导致编译器尝试自动转换为 int ?我是否缺少操作员或其他什么?