如果一个变量直接传入,它可以正常工作,但是当我使用一个只返回变量的函数时,它就会停止工作。为什么会这样?
struct Edge {
Point ap() const { return set[a]; }
Point *set;
int a;
}
function f(Point &p) {}
Edge e;
f(e.ap()); // Error: No matching function call to 'f'
f(e.set[e.a]); // Works fine
Point p = e.ap();
f(p); // Works fine
答案 0 :(得分:3)
Point ap() const { ... }
ap
按值返回,因为您没有在任何地方存储函数调用,所以执行此操作:
f(e.ap());
将一个临时对象返回给f
,该对象无法绑定到Point&
类型。
你有很多选择,你可以......
通过const引用返回Point::ap
,即
Point const& ap() { ... }
让f
按const&
,按值或通过右值参考Point&&
将函数调用的结果存储在变量中:
Point p = e.ap();
f(p);
答案 1 :(得分:2)
Point
返回的ap
是暂时的。为了将临时值作为参数传递,函数需要通过值const
引用或右值引用来获取参数。
void function f(Point p) {} // By value
void function f(const Point& p) {} // By const reference
void function f(Point &&p) {} // By rvalue reference