通过引用传递临时对象
Passing temporary objects by reference
我有两个类:
圆和点
Class Circle包含一个Dot,Dot包含一个int。 Circle 有一个 getDot() 函数,Dot 有一个 lessThan(Dot& ) 函数。
我想根据 Dot 中的 int 值对 Circles 数组 elems[] 进行排序。如果我有一个要与数组中的某个值进行比较的 Circle circ,我基本上需要一条执行以下操作的行:
elems[0].getDot().lessThan(circ.getDot())
但它不会编译...我可以通过临时解决这个问题
Dot dt = circ.getDot()
并通过
elems[0].getDot().lessThan(dt)
但这似乎是不必要的复制。有没有更有效的方法来解决这个问题?
很遗憾,我仅限于使用 lessThan(dot&) 进行比较,但我可以修改其中的内容。
编译错误为:
错误:从“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);
}
我有两个类: 圆和点
Class Circle包含一个Dot,Dot包含一个int。 Circle 有一个 getDot() 函数,Dot 有一个 lessThan(Dot& ) 函数。
我想根据 Dot 中的 int 值对 Circles 数组 elems[] 进行排序。如果我有一个要与数组中的某个值进行比较的 Circle circ,我基本上需要一条执行以下操作的行:
elems[0].getDot().lessThan(circ.getDot())
但它不会编译...我可以通过临时解决这个问题
Dot dt = circ.getDot()
并通过
elems[0].getDot().lessThan(dt)
但这似乎是不必要的复制。有没有更有效的方法来解决这个问题?
很遗憾,我仅限于使用 lessThan(dot&) 进行比较,但我可以修改其中的内容。
编译错误为: 错误:从“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);
}