[C++]auto类型说明符
auto类型说明符:当编程时不清楚此变量的类型时,就可以使用auto说明符让编译器去根据初始值来判断此变量的类型。
要点:
1.当使用了auto说明符时语句中所有变量的初始基本数据必须一样。
auto a=0,*p=0;
auto a=0,p=3.15 // err,a与p的类型不一样
2.当auto说明符,中用的是引用进行初始化时,实际上初始化的数据类型是引用的对象。
int i=10,&r=i;
auto a=r; // auto a=i;
3.auto一般会忽略顶层const,同时底层const则会保留下来,特殊情况是:当auto修饰的变量的初始值是一个既有顶层也有底层的变量时,就不会进行忽略顶层const而保留底层const的操作。
int i=0;
const int ci=i,&cr=ci;
auto b=ci; // 这里b是一个整数,顶层const被忽略掉了
auto d=&i; // 这里d是一个指向int型的指针。
auto e=&ci; // 这里e是一个指向int型的常量指针,底层const被保留了下来int a=10;
const int *const i = &a;
auto k = &i; // 这里的k就是一个指向常量的常量指针,即const int *const k =&i;
解释:对常量对象取地址是一种底层const,为什么是一种底层const呢?因为:ci是一个int型常量,那么ci的值和地址就不能变,既然不能变,那么&ci也就不能变,即e所指的对象不能变,而要有这个特性,那么e的类型就只能是const int *const e,但是auto会忽略掉顶层的const,所以就只能是const int *e;,如果要要求变成即指向常量的常量指针,则只需要在auto前面加上const即可,如下。
4.如果需要推断出的auto是一个顶层const,则需要明确指出:
const auto f=&ci; // 这样总的类型就会变成 const int *const f=&ci;
const auto f=ci; // 等价于 const int f=ci;
5.函数的参数不能是auto类型。
int A(auto i) // err
{}
[C++]auto类型说明符相关推荐
- 关键字typedef、关键字using、auto类型说明符和declytpe类型指示符
文章目录 类型别名 概念 关键字 typedef 别名声明 (alias declaration) using 指针.常量和类型别名 类型别名简化多维数组指针 auto类型说明符 概念 复合类型.常量 ...
- C++ const限定符和auto类型说明符
const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...
- C++11 auto类型说明符
编程时常常需要将表达式的值赋值给变量,这就要求在声明变量前知道表达式的类型,有时候很难预先知道,所以C++11新标准引入了auto类型说明符,其作用就是让编译器替我们去分析表达式的值类型,,auto让 ...
- c++11 auto 类型说明符详解
当使用 auto 自动推断类型时,需要注意以下几点: 一.必须要有初始值 一个显而易见的道理,auto 表示编译器根据初始值类型推断声明变量的类型,因此必须要有初始值. 二.一条声明语句只能有一种基本 ...
- C++ decltype类型说明符(尾置返回类型使用)
转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...
- C++ decltype类型说明符
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 declt ...
- Effective Modern C++翻译(3)-条款2:明白auto类型推导
条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一 ...
- C++中的sta::atomic<bool>和auto类型
文章目录 sta::atomic auto类型用法总结 sta::atomic 最基本的原子整数类型是std::atomic(可以使用预定义的别名std::atomic_bool),这是一个比std: ...
- 程序编译出错,缺少类型说明符;语法错误 : 缺少“;”(在标识符“PVOID64”的前面)
1>正在编译... 1>stdafx.cpp 1>E:/VS2005/VC/PlatformSDK/include/winnt.h(222) : error C2146: 语法错 ...
最新文章
- RamDisk - 充分利用Vista的大内存
- 【学习笔记】ODATA
- javascript 之数据类型--01
- linux内核配置与编译,LINUX内核的配置与编译、安装
- 禁止服务器的协议,启用或禁用服务器网络协议
- linux 的ip 设置lo_Linux服务器设置静态IP的方法
- SLS机器学习介绍(02):时序聚类建模
- Select和epoll的区别
- linux中的轮询机制select/poll/epoll特点分析
- Linux下使用QQ
- ue4 4.27源码下载
- win10如何共享计算机网络打印机,win10如何共享打印机给其它电脑,Win10设置打印机共享操作步骤...
- PS的对图像一些简单处理
- 【JAVA学习路径 表述(超级详细的Java知识宇宙)】
- 小米,苹果,百度,三星等公司的智能语音识别功能如何测试?
- 20160620 盘后复盘
- 创建Deployment时指定hostnetwork是干啥的?
- Django的CBV和FBV
- autotools使用步骤(用autotools制作makefile)
- FFmpeg在iOS开发中编译并使用
热门文章
- hMailServer 使用教程 —— 手把手教你搭建自己的邮箱服务器
- linux apache 配置文件位置,Apache主配置文件httpd.conf 详解
- P14 JScrollPane 滚动面板
- 从Python爬虫到Spark预处理数据的真实需求[三]
- 前置条件,不变性条件,后置条件 --《java并发编程实战》
- 4.5 路径MTU发现
- 基于S32DS实现CAN、LIN基础结合芯片UJA1075的功耗模式切换设置(Standby、Normal、Sleep)
- 【2019正睿金华集训】0803总结
- 2021国潮新消费大会落幕,新国潮产业进入“黄金十年”
- 用Endnote在word中插入文献出现{Xu, 1997 #407}等样式的错误的解决方法如下