当前位置: 首页 > news >正文

C++11·部分重要语法II

目录

类型分类(了解)

引用折叠

万能引用

完美转发

模版可变参数

包扩展

小知识


类型分类(了解)

C++11后,进一步对类型进行了划分,右值被划分为纯右值(pure value,简称prvalue)和将亡值(expiring value,简称xvalue)

纯右值:指字面值常量或求值结果相当于字面值常量或一个不具名的临时对象。如 42、true、nullptr或函数传值返回的返回值、临时对象或整形a++,a+b等。

将亡值:返回右值引用的函数的调用表达式和转换为右值引用的转换函数的调用表达,如move(x)、static_cast<X&&> (x)

泛左值(generalized value,简称glvalue):包含左值和将亡值。

引用折叠

C++ 中不能直接定义引用的引用,但可以通过模版或typedef中的类型操作构成引用的引用,也就是引用折叠。

规则:1.右值引用的右值引用折叠成右值引用。

2.其它所有组合折叠成左值引用。

补充:1.const变量是左值

2.const左值move之后是const右值

万能引用

 

传左值引用时引用折叠成左值引用,传右值引用时引用折叠成右值引用,所以叫万能引用。

注:带模版的才是万能引用。

void print(T&& tmp)

{}

像这样的只是普通右值引用。

完美转发

上篇文章提过,右值引用表达式依旧是左值。

所以如果要在万能引用的函数体中传参数会有问题,不move传的都是左值,而move之后传的都是右值。

怎么让传到fun1的参数随着tmp的类型变化而变化呢,使用forward(完美转发)

forward可以保持tmp的属性,传过来的T是左值引用,那么forward传的也是左值;如果T是右值,forward传的也是右值。

模版可变参数

C++支持可变数量参数的函数模版和类模版,可变数量的参数被称为参数包。

参数包分为两种:模版参数包(表示0或多个模版参数)、函数参数包(表示0或多个函数参数)

注:可变参数模版的原理和模版类似,本质还是去实例化对应类型和个数的多个函数。

可用sizeof计算参数包中参数个数。

包扩展

两种扩展方式

1.

 2.

小知识

1.SHRT_MIN -32768 //有符号16位整形最小值

2.SHRT_MAX 32767 //有符号16位整形最大值

3.USHRT_MAX 0xffff //无符号16位整形最大值

4.INT_MIN -2147483648  //有符号整形最小值

5.INT_MAX 2147483647  //有符号整形最大值

相关文章:

  • android11关机安卓充电的UI定制化
  • 练习题:110
  • Mybatis逆向工程
  • 【商城实战(94)】构建高并发的负载均衡与集群架构
  • RedHatLinux(2025.3.22)
  • 解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题
  • 复现GitHub上`https://github.com/tobiasfshr/map4d`这个项目
  • Android学习总结之ContentProvider跨应用数据共享
  • 无需docker三步安装deepseek可视化操作软件-Open-WebUI
  • RabbitMQ消息相关
  • #C8# UVM中的factory机制 #S8.5# 对factory机制的重载进一步思考(二)
  • Hyperlane:Rust Web开发的未来,释放极致性能与简洁之美
  • 2025-3-29算法打卡
  • epoll 和ractor模型学习
  • Docker 的实质作用是什么
  • Blender多摄像机怎么指定相机渲染图像
  • 《数据结构:单链表》
  • 最常使用的现代C++新特性介绍
  • 复古半色调褶皱照片效果ps特效滤镜样机 Halftone Crumpled Paper Effect
  • 通过本地部署 DeepSeek 来协助感光材料研发(配方设计和有机合成等方面)的一般步骤和思路
  • 言短意长|政府食堂、停车场开放的示范效应
  • 光明网评论员:手机“二次放号”,需要重新确认“你是你”
  • 杜前任宁波中院代理院长,卸任宁波海事法院院长
  • 上海灵活就业人员公积金新政有哪些“创新点”?
  • 民生访谈|宝妈宝爸、毕业生、骑手……上海如何为不同人群提供就业保障
  • 科学时代重读“老子”的意义——对谈《老子智慧八十一讲》