cpp左值和右值

左值:无名字,临时值,可通过&取地址

右值:有名字,持久值,不可取地址

cpp提供了move方法把左值转化为右值

函数参数

值传递参数:

一般来说会复制一份实参在函数内使用,当参数为定义了移动构造函数的类类型时,对于右值实参会触发移动构造。

引用传递参数:

类模板函数:

C++ 中万能引用是 C++11 引入的特殊语法,仅在以下场景生效:

  • 形式为   T&& (无const/volatile修饰,无嵌套在模板参数中);
  • T是模板类型参数,且在函数调用时会发生类型推导。

满足这两个条件,T&&才会成为万能引用(可绑定左值或右值);否则,T&&就是普通的右值引用

进入函数后,参数成为左值,想要保持参数的左/右值性,就需要搭配forward实现完美转发

// 辅助函数:区分左值/右值
void process(int&) { std::cout << "处理左值\n"; }
void process(int&&) { std::cout << "处理右值\n"; }

// 普通函数模板:万能引用 + 完美转发(无类模板,直接写函数模板)
template <typename U>
void forward_param(U&& param) {
    process(std::forward<U>(param)); // 完美转发核心
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值