【发布时间】:2019-03-02 21:23:18
【问题描述】:
我有两个课程: 圆和点
类 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
【问题讨论】:
-
为什么它需要一个 non const 引用呢?
-
如果 lessThan 的参数是一个引用,你就没有复制它。此外,通常会省略初始构造/分配。净效果应该与使用临时的相同(除了
dt明确在范围内) -
你能把函数改成
Dot const&吗? -
我明白了,我不知道 const 和 non-const 引用之间的区别。谢谢大家!
标签: c++ arguments pass-by-reference temporary-objects