【发布时间】:2019-11-09 18:23:03
【问题描述】:
提前说明:问题与我自己实现的vector类有关,与std::vector无关
考虑以下运算符重载:
//in the Vector-class(declaration)
friend Vector operator+(const Vector& a, const Vector& b);
//outside the Vector-class(implementation)
Vector operator+(const Vector& a, const Vector&b) {
//...
}
它引用两个向量,并返回它们的总和。 现在,当我尝试以下操作时:
Vector foo();
Vector bar();
Vector byVal = foo + bar; //using objects
Vector byRef = &foo + &bar; //using address
在这两种情况下,我的 IDE 都会告诉我以下信息:
表达式必须具有整数或无范围枚举类型
在第二种情况下,这是有道理的,因为我只会在被调用函数接受指针时传递一个产生的指针,而对于一个接受引用的函数,我可以传递对象本身,但我不明白为什么这里不能只使用对象。
让我更困惑的是,以下似乎是可能的:
Vector* foo = new Vector();
Vector* bar = new Vector();
Vector foobar = *foo + *bar;
也就是说,我可以将 de-referenced pointers 与重载运算符一起使用。
这种行为的原因是什么,在这种情况下我应该如何使用我的重载运算符?
【问题讨论】:
-
Vector byRef = &foo + &bar; //by reference这将传递foo和bar的地址来调用操作符函数。您似乎对参考参数的工作方式有一些严重的误解。 -
答案已经解决了您的问题。但是,我仍然想向您推荐以下视频,以了解如何将值传递给函数:youtube.com/watch?v=PNRju6_yn3o
-
@πάνταῥεῖ 我认为我的问题更多在于“通过引用传递”与“通过值传递”的定义,这篇文章stackoverflow.com/questions/410593/pass-by-reference-value-in-c 帮助我更清楚地了解了这一点。我编辑了我的问题,希望我的陈述现在更正确。
-
@ancientchild 我可能应该把你的问题作为你链接的那个人的骗子来结束,是的。
标签: c++ reference operator-overloading operators dereference