c++11 auto 类型说明符详解
当使用 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 类型说明符详解相关推荐
- C++11 auto类型说明符
编程时常常需要将表达式的值赋值给变量,这就要求在声明变量前知道表达式的类型,有时候很难预先知道,所以C++11新标准引入了auto类型说明符,其作用就是让编译器替我们去分析表达式的值类型,,auto让 ...
- C++11 decltype类型推导详解
decltype decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type" ...
- 关键字typedef、关键字using、auto类型说明符和declytpe类型指示符
文章目录 类型别名 概念 关键字 typedef 别名声明 (alias declaration) using 指针.常量和类型别名 类型别名简化多维数组指针 auto类型说明符 概念 复合类型.常量 ...
- python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...
- C++ const限定符和auto类型说明符
const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...
- kubernetes系列11—PV和PVC详解
kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...
- chrono是一个time library,C++11 std::chrono库详解
C++11 std::chrono库详解 chrono是一个time library, 源于boost,现在已经是C++标准.话说今年似乎又要出新标准了,好期待啊! 要使用chrono库,需要#inc ...
- python序列类型-python序列类型种类详解
python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...
- python编程序列类型_python序列类型种类详解
python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...
最新文章
- SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
- ios6:新特征介绍
- 决策树 bagging boosting 的区别
- C++经典面试题(最全,面中率最高)
- 音视频技术开发周刊 76期
- 进程调度的时机,切换与过程,方式
- java 每隔一小时运行_每隔一小时执行一次 Full GC 分析排查
- 利用windows 2003实现服务器群集的搭建与架设(二)
- 推荐3款简约好用录屏工具
- 小米php架构图,小米商城基本框架部分
- 百度地图+城市联动实现实时触发查询地址
- OSChina 周六乱弹 ——什么是村支书不可推卸的责任!
- ubuntu18.04安装0.6以上版本的flameshot
- groovy 字符串截取最后一个_认识python之字符串的下标和切片(17)
- go基础知识学习笔记-篇幅很长写的我想吐
- JS黄金分割法实现随机漂亮颜色!
- 巧用Html5 History Api解决SPA的SEO问题
- matlab 机器人运动,matlab机器人运动计算
- 2021年低压电工考试资料及低压电工模拟试题
- 孩子犯错了不能打下面这7种状况您可要慎重批判喽!
热门文章
- python统计单词平均长度_统计学的Python实现-014:几何平均数(衡量样本集中趋势)...
- 华擎b365m itx 黑苹果_迷你ITX小机箱装机实录,黑苹果首选
- java+@api_Java 常用的api
- NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)
- ModelFileType:XML、Hdf5、dat等不同模型文件后缀文件的简介、使用方法之详细攻略
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
- pyhanlp 两种依存句法分类器
- 运行 vue 报node错
- JavaWeb学习总结(六)—HttpServletResponse
- applicationSettings设置和appsttings