C++ 通过引用传递临时对象
我有两门课: 圆点 类Circle包含一个点,Dot包含一个int。Circle有一个getDot函数,Dot有一个lessThanDot&函数 我想根据圆点内的int值对圆数组elems[]进行排序。如果我有一个圆圈,我想与数组中的某个值进行比较,我基本上需要一条行来执行以下操作:C++ 通过引用传递临时对象,c++,arguments,pass-by-reference,temporary-objects,C++,Arguments,Pass By Reference,Temporary Objects,我有两门课: 圆点 类Circle包含一个点,Dot包含一个int。Circle有一个getDot函数,Dot有一个lessThanDot&函数 我想根据圆点内的int值对圆数组elems[]进行排序。如果我有一个圆圈,我想与数组中的某个值进行比较,我基本上需要一条行来执行以下操作: elems[0].getDot().lessThan(circ.getDot()) 但它不会编译。。。我可以用临时的方法解决这个问题 Dot dt = circ.getDot() 路过 elems[0].get
elems[0].getDot().lessThan(circ.getDot())
但它不会编译。。。我可以用临时的方法解决这个问题
Dot dt = circ.getDot()
路过
elems[0].getDot().lessThan(dt)
但这似乎是不必要的复制。有没有更有效的方法来解决这个问题
不幸的是,我仅限于使用lessThandot&进行比较,但我可以修改它的内容
编译器错误为:
错误:从'Dot'cout类型的右值初始化'Dot&'类型的非常量引用无效示例:
#include <vector>
#include <algorithm>
struct Dot
{
Dot(int i) : value_(i) {}
bool lessThan(Dot const& other) const
{
return value_ < other.value_;
}
int value_;
};
struct Circle
{
Circle(Dot dot = Dot(0))
: dot_(dot)
{
}
const Dot& getDot() const { return dot_; }
Dot dot_;
};
void sortCircles(std::vector<Circle>& circles)
{
auto order = [](Circle const& l, Circle const& r)
{
return l.getDot().lessThan(r.getDot());
};
std::sort(circles.begin(), circles.end(), order);
}
为什么它采用非常量引用呢?如果lessThan的参数是引用,那么您就不能复制它。此外,初始施工/任务通常将被省略。净效果应该与使用临时值相同,只是dt显式位于scope中。您可以将函数更改为采用点常量吗?我明白了,我不知道常量引用和非常量引用之间的区别。谢谢大家!@技巧通常是在对象上提供const访问器方法。