当使用 auto 自动推断类型时,需要注意以下几点:

一、必须要有初始值
一个显而易见的道理,auto 表示编译器根据初始值类型推断声明变量的类型,因此必须要有初始值。

二、一条声明语句只能有一种基本类型

auto i = 0, *p = &i; // 正确,基本类型是int
auto sz = 0, pi = 3.14; // 错误,由sz推断基本类型是int,但pi是double

需要特别注意,第一条语句的 * 是从属于p的,表示p是指针,与基本类型无关,基本类型是int。

三、auto 一般会忽略初始值的顶层const属性
所谓顶层const和底层const,是为了研究指针而引入的说法。顶层const属性是指针自身具有const属性;而底层const属性则是指针特有的,指的是指针指向对象具有的const属性。

一般来说,讨论指针以外的对象时,const属性都是指顶层const。引用类型比较特殊,因为引用本身不是对象,而是另一个对象的别名,因此讨论引用的const属性时一定指的是底层const。

auto i = 0;const int ci = i, &cr = ci; // cr是ci的别名
auto b = ci; b++; // b是int,ci的顶层const属性被忽略
auto c = cr; c++; // c是int,cr(即ci)的顶层const属性被忽略
auto d = &i; (*d)++; // int *
auto e = &ci; // 对常量对象取地址是底层const,所以e是指向常量的指针const int *
const auto f = ci; // 明确指出f具有顶层const


四、auto 声明引用会保留初始值的顶层const属性

auto i = 0;
const int ci = i, &cr = ci; // cr是ci的别名
auto &g = ci; // auto引用保留初始值ci的顶层const属性,不能通过g修改ci的值


五、auto 声明不能引用字面值,除非明确指明

auto i = 0;
const int ci = i, &cr = ci; // cr是ci的别名   //auto &h = 42; // 错误,根据42推断出基本类型是int,int引用不能绑定到int常量上
const auto &j = 42; // 明确指出j是常量引用

六、 & * 不属于基本类型,而是声明符的一部分

auto i = 0;
const int ci = i, &cr = ci; // cr是ci的别名   auto k = ci, &l = i; // auto推断基本类型是 int
auto &m = ci, *p = &ci; // m是对常量的引用,p是指向常量的指针
//auto &n = i, *p2 = &ci; // ERROR

七、引用即别名
时刻记住这条真理,遇到类似下面的情况就不会犯迷糊!

int a[10]{};
auto b = a; // b是 int*
auto &c = a; // c是int[10]&

c++11 auto 类型说明符详解相关推荐

  1. C++11 auto类型说明符

    编程时常常需要将表达式的值赋值给变量,这就要求在声明变量前知道表达式的类型,有时候很难预先知道,所以C++11新标准引入了auto类型说明符,其作用就是让编译器替我们去分析表达式的值类型,,auto让 ...

  2. C++11 decltype类型推导详解

    decltype decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type" ...

  3. 关键字typedef、关键字using、auto类型说明符和declytpe类型指示符

    文章目录 类型别名 概念 关键字 typedef 别名声明 (alias declaration) using 指针.常量和类型别名 类型别名简化多维数组指针 auto类型说明符 概念 复合类型.常量 ...

  4. python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...

    Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...

  5. C++ const限定符和auto类型说明符

    const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...

  6. kubernetes系列11—PV和PVC详解

    kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...

  7. chrono是一个time library,C++11 std::chrono库详解

    C++11 std::chrono库详解 chrono是一个time library, 源于boost,现在已经是C++标准.话说今年似乎又要出新标准了,好期待啊! 要使用chrono库,需要#inc ...

  8. python序列类型-python序列类型种类详解

    python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...

  9. python编程序列类型_python序列类型种类详解

    python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...

最新文章

  1. SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
  2. ios6:新特征介绍
  3. 决策树 bagging boosting 的区别
  4. C++经典面试题(最全,面中率最高)
  5. 音视频技术开发周刊 76期
  6. 进程调度的时机,切换与过程,方式
  7. java 每隔一小时运行_每隔一小时执行一次 Full GC 分析排查
  8. 利用windows 2003实现服务器群集的搭建与架设(二)
  9. 推荐3款简约好用录屏工具
  10. 小米php架构图,小米商城基本框架部分
  11. 百度地图+城市联动实现实时触发查询地址
  12. OSChina 周六乱弹 ——什么是村支书不可推卸的责任!
  13. ubuntu18.04安装0.6以上版本的flameshot
  14. groovy 字符串截取最后一个_认识python之字符串的下标和切片(17)
  15. go基础知识学习笔记-篇幅很长写的我想吐
  16. JS黄金分割法实现随机漂亮颜色!
  17. 巧用Html5 History Api解决SPA的SEO问题
  18. matlab 机器人运动,matlab机器人运动计算
  19. 2021年低压电工考试资料及低压电工模拟试题
  20. 孩子犯错了不能打下面这7种状况您可要慎重批判喽!

热门文章

  1. python统计单词平均长度_统计学的Python实现-014:几何平均数(衡量样本集中趋势)...
  2. 华擎b365m itx 黑苹果_迷你ITX小机箱装机实录,黑苹果首选
  3. java+@api_Java 常用的api
  4. NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)
  5. ModelFileType:XML、Hdf5、dat等不同模型文件后缀文件的简介、使用方法之详细攻略
  6. Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
  7. pyhanlp 两种依存句法分类器
  8. 运行 vue 报node错
  9. JavaWeb学习总结(六)—HttpServletResponse
  10. applicationSettings设置和appsttings