当前位置: 首页 > 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)。

http://www.dtcms.com/a/53388.html

相关文章:

  • 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(区域注意力)
  • LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素
  • Kafka - 高吞吐量的七项核心设计解析
  • 全面复习回顾——C++语法篇2
  • Docker部署开源运维工具MyIP结合内网穿透远程在线网络诊断和监控
  • 【Unity Shader编程】之光照模型
  • 【1Panel】平替宝塔面板!1Panel面板香橙派部署结合内网穿透远程管理
  • 传统架构与集群架构搭建LAMP环境并部署WordPress服务
  • VsCode/Cursor workbench.desktop.main.js 的入口
  • L1-041 寻找250
  • 企业出海如何搭建架构才能让资金合规回流?