按值传递 按引用传递

文章探讨了C++中参数传递的两种方式:按值传递和按引用传递。按值传递会拷贝对象,而按引用传递则不拷贝,允许直接修改原对象。特别地,文章提到了const引用和非const引用的区别,以及在使用模板时可能遇到的类型推断问题。示例代码展示了不同类型的函数指针如何在模板函数中处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按值传递 按引用传递

按值传递

按引用传递


 现在来讨论按引用传递。 按引用传递不会拷贝对象(因为形参将引用被传递的实参) 。 而且,按引用传递时参数类型也不会退化(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;
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值