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

C++11新特性:auto遇上const时的推导规则

当auto推导变量类型时,const修饰符会影响推导结果,我们具体看一下有哪些影响
1、普通变量
例如:

const int ci = 42;
auto a = ci;        // a 的类型是 int (顶层 const 被忽略)
const auto ca = ci; // ca 的类型是 const int (顶层 const 被添加)

在这里,ci是一个const int,但是auto a = ci;推断出的类型仅仅是int,因为auto忽略了顶层const。
对于const auto ca = ci;,ca不仅继承了ci的类型int,还因为const的存在而成为了const int。
普通变量比较好理解。
2、指针 const就是指针比较复杂
例如

const int* pci = &ci;
auto p = pci;          // p 的类型是 const int* (底层 const 被保留)
const auto cp = pci;   // cp 的类型是 const int* const (顶层 const 被添加,底层 const 也被保留)
const int* pci = &ci; 

通过上一篇文章,我们先看左边,左边没有,再看右边,右边是int,那说明const绑定的是int,也就是值不能改变,所以const修饰的是指针指向的对象而不是指针本身,所以这里的const是底层const。
auto p = pci;
auto推导会忽略顶层const,但是不会忽略底层const,所以p的类型是const int*,即它指向的是一个const int。

总结
1、auto推导类型时会忽略顶层const,但会保留底层const。 
2、使用const auto时,const会被添加到推导出的类型上,如果初始化表达式中包含底层const,最后就是(顶层 const + 底层 const)。

相关文章:

  • blender看不到导入的模型
  • YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及
  • 要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master
  • 从0到1搭建315答题抽奖小程序:技术踩坑与运营真相
  • 【Vue CLI脚手架开发】——6.scoped样式
  • javascript字符串截取有哪些
  • RabbitMQ知识点
  • 二叉树-验证二叉搜索树
  • 计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例
  • RV1126采集VI视频数据流
  • 【QWEN】机器人控制器的控制周期越短精度越高吗
  • Kotlin D1
  • 模块15.常用API
  • Java接口(3)与图书管理系统
  • Android 多用户相关
  • tcp/ip协议详细介绍,tcpip协议详细介绍
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例5: 搜索和过滤
  • DeepSeek精品课分享 清北
  • 《几何原本》命题I.15
  • YOLOv12改进之A2(区域注意力)
  • 网站导入dreamweaver/百度百家
  • 贵州建设厅网站建筑企业公示栏/宁波网站排名优化seo
  • 99到家微网站什么做的/关键词全网搜索
  • 百度网站建设公司/指数基金定投技巧
  • wordpress页面内容调用/江阴网站优化公司
  • 如何做独立网站/网站收录查询方法