c++可以"如果可能的话通过引用传递"吗?

Can c++ 'pass by reference if possible'?

本文关键字:引用 如果 可以 c++      更新时间:2023-10-16

我有一个带有只读参数的方法。

template <typename T>
void foo(const T t) {...}

这个定义的好处是foo(2)语法正确。但是,它的缺点是,在大对象上应用foo会使它复制对象。由于我只从论点中阅读,这只是浪费时间和记忆。

标准解决方案是将参数t常量引用。但是,这有一个缺点,即foo(2)语法不再正确。我将不得不做我觉得不幸int i = 2; foo(i);

有没有办法两全其美?因此,foo(2)在语法上是正确的,并且在对象上应用foo使其通过引用传递?

编辑:显然,常量引用已经是两全其美的。现在我想知道为什么会这样。为什么foo(2)语法正确?2如何成为这里的参考?

C++ 会在需要时实现临时,您可以将临时绑定到const&,但不能绑定&

因此,foo_value(2)创建了一个int,其值2称为t作为参数。 foo_cref(2)创建一个匿名临时参数,然后将 int const& t 参数绑定到它,其中foo_valuefoo_cref是您在问题中谈论的foo的明显变体。

相关文章: