按值传递 按引用传递
按值传递
按引用传递
现在来讨论按引用传递。 按引用传递不会拷贝对象(因为形参将引用被传递的实参) 。 而且,按引用传递时参数类型也不会退化(decay) 。 不过, 并不是在所有情况下都能使用按引用传递, 即使在能使用的地方, 有时候被推断出来的模板参数类型也会带来不少问题。
按 const 引用传递

又一个例子:
按非 const 引用传递
如果想通过调用参数来返回变量值(比如修改被传递变量的值) , 就需要使用非 const 引用(要么就使用指针) 。 同样这时候也不会拷贝被传递的参数。 被调用的函数模板可以直接访问被传递的参数。
2023年3月1日更新
#include <iostream>
#include <ranges>
#include <vector>
#include <ranges>
#include <iostream>
void compare(int l, int r) {
}
template<typename F>
void trans(F&& f) {
}
// 一下是c++ insights里的
template<> // void trans(F&& f)
void trans<void (&)(int, int)>(void (&f)(int, int))
{
}
template<>// void trans(F& f)
void trans<void (int, int)>(void (&f)(int, int))
{
}
template<>// void trans(F f) 这个是退化
void trans<void (*)(int, int)>(void (*f)(int, int))
{
}
int main()
{
trans(compare);
return 0;
}