C++ 通过引用传递临时对象

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

我有两门课: 圆点

类Circle包含一个点,Dot包含一个int。Circle有一个getDot函数,Dot有一个lessThanDot&函数

我想根据圆点内的int值对圆数组elems[]进行排序。如果我有一个圆圈,我想与数组中的某个值进行比较,我基本上需要一条行来执行以下操作:

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访问器方法。