C ++是否可以“通过引用传递”?

时间:2019-04-29 01:14:41

标签: c++ reference const

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

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

此定义的好处是foo(2)在语法上是正确的。但是,这样做的缺点是在大对象上应用foo会使它复制对象。由于我只是从参数中读取内容,所以这只是浪费时间和内存。

标准解决方案是使参数t成为const引用。但是,这样做的缺点是foo(2)在语法上不再正确。我不得不做int i = 2; foo(i);,但我很不幸。

有没有办法做到两全其美?这样foo(2)在语法上是正确的,并且在对象上应用foo会使它通过引用传递吗?

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

1 个答案:

答案 0 :(得分:1)

C ++将在需要时具体化临时对象,您可以将临时对象绑定到const&,但不能绑定到&

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