gpt4 book ai didi

c++ - C++中运算符重载的问题

转载 作者:行者123 更新时间:2023-11-28 00:48:14 24 4
gpt4 key购买 nike

我的操作符在我的 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::+ 运算符永远不会被调用,即使所有操作数都是 Variants我可以看到)

                res = res + Variant(res1) * res2;
else

而在下一行正确的 Variant::+operator 被调用并且一切正常

                res = res + res2;
// } catch (...) {
// error = "Invalid operator";
// isok = false;
//

我只是注意到,只需将乘法放在一个临时变体变量(如 tempv = Variant(res1) * res2)中并分两步进行即可,但我不明白为什么。 }谁能建议什么会导致编译器尝试自动转换为 int ?我是否缺少运算符(operator)或其他东西?

最佳答案

Variant operator +(Variant &v)

应该是

Variant operator +(const Variant &v)

operator+ 没有被调用的原因是 Variant(res1) 创建的临时变量不能绑定(bind)到非常量参数 Variant &v

关于c++ - C++中运算符重载的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com