当前位置: 首页 > 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.lryc.cn/news/547556.html

相关文章:

  • hom_mat2d_to_affine_par 的c#实现
  • 相机几何与标定:从三维世界到二维图像的映射
  • GPTQ - 生成式预训练 Transformer 的精确训练后压缩
  • 【Python项目】基于深度学习的电影评论情感分析系统
  • Redis特性总结
  • 深入理解PHP的内存管理与优化技巧
  • java常见的几种并发安全问题及解决方案
  • 介绍一下安装时情况 kubernetes 集群
  • Dify部署踩坑指南(Windows+Mac)
  • 安科瑞新能源充电桩解决方案:驱动绿色未来,赋能智慧能源
  • 深入剖析Java代理模式:静态代理与动态代理的实战应用
  • JVM与性能调优详解
  • 【嵌入式通信协议】串口的详细介绍
  • 乐鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片
  • Go学习笔记:基础语法3
  • 虚拟卡 WildCard (野卡) 保姆级开卡教程
  • 机试准备第10天
  • Apache ECharts介绍(基于JavaScript开发的开源数据可视化库,用于创建交互式图表)
  • 最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)
  • Linux - 进程通信
  • 使用 Arduino 的 WiFi 控制机器人
  • 网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析
  • verb words
  • unity console日志双击响应事件扩展
  • 维度建模维度表技术基础解析(以电商场景为例)
  • Leetcode 264-丑数/LCR 168/剑指 Offer 49
  • 阿里云MaxCompute面试题汇总及参考答案
  • 笔记:Directory.Build.targets和Directory.Build.props的区别
  • istio入门到精通-2
  • 第5章:vuex