C++之auto关键字
auto的早期作用
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,所谓自动存储就是函数结束(出了作用域),这个变量自动销毁。这样的作用没有意义,因为现在的变量也是出了作用域就自动销毁。auto的这个用法就被消除了
auto现在的作用
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得,简单来说就是由编译器来识别变量的类型。
int a = 10;auto b = a;auto c = 'a';//auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化
- a的类似是int,把a给b,b由于加了关键字,自动识别a的类似,因此b的类型也是int。
- 字符‘a’的类型是char,c自动识别类型,因此c的类型也是char
注意事项:使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。因此直接写
auto e,而不进行初始化,会编译报错。
auto的使用细则
auto自动去除const属性
如:c, d ,e中会没有const属性
例题:
Bb为什么不能改?
因为加了引用,bb是b的别名有const属性;不加就可以改,因为auto自动去除const属性。
auto与指针和引用结合起来使用的区别
用auto声明指针类型时,用auto和auto没有任何区别,但用auto声明引用类型时则
必须加&
int main()
{int x = 10;auto a = &x;//与auto* 没有区别auto* b = &x;与auto没有区别auto& c = x;cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;*a = 20;*b = 30;c = 40;return 0;
}
在同一行定义多个变量
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
void TestAuto()
{auto a = 1, b = 2; auto c = 3, d = 4.0; // 该行代码会编译失败,因为c和d的初始化表达式类型不同
}
auto不能推导的场景
auto不能作为函数的参数
void TestAuto(auto a)// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导
{}
auto不能直接用来声明数组
void TestAuto()
{int a[] = {1,2,3};auto b[] = {4,5,6};//报错
}
C++之auto关键字相关推荐
- auto关键字详解 C++
C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...
- C++ auto 关键字的使用
C++ auto 关键字的使用 https://www.cnblogs.com/KunLunSu/p/7861330.html C++98 auto 早在C++98标准中就存在了auto关键字,那时的 ...
- C++11 auto 关键字学习1
在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的. C++11 中,使用它来做自动类型推导.也就是说,使用了 aut ...
- c++ auto 关键字
C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导.也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了 #inclu ...
- 【小白学习C++ 教程】二十、C++ 中的auto关键字
@Author: Runsen 在 C++ 11 之前,每种数据类型都需要在编译时显式声明,在运行时限制表达式的值,但在 C++ 新版本之后,包含了许多关键字,允许程序员将类型推导留给编译器本身. 有 ...
- C++ auto关键字
C++ auto关键字 1)编译器根据初始值判断变量类型 2)必须初始化 3)一条语句声明多个变量(只能有一个基本类型,const int和int属于不同类型)auto i = 0, *p = &am ...
- C++中auto关键字
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105010028 a ...
- C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))
内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数,在编 ...
- 关于C/C++中的“auto”关键字
C/C++ 98标准 C++03标准 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期.此用法是多余的,因为即使定义变量时不加" ...
- 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
文章目录 一:内联函数 (1)宏函数的缺陷 (2)内联函数的概念 (3)内联函数的特性 二:auto关键字(C++11) (1)auto简介 (2)auto使用注意事项 三:基于范围的for循环(C+ ...
最新文章
- vue数组转Excel表格导出
- activiti候选人的多个场景应用
- 文件包含(include require)
- [转载] Java中的关键字含义以及介绍
- Ubuntu 12.10 添加 node 应用为自启动服务
- Win10 安装 Tomcat 解压版
- 使用SnakeYAML读取yaml配置文件
- 美服fgo显示服务器异常,FGO日服美服错误代码合集_FGO日服美服错误代码汇总_牛游戏网...
- 华为交换机eth口作用_基于华为交换机的基本配置——以Eth-Trunk链路聚合技术为例.pdf...
- APM_Rover运行纲领分析,以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:
- 《人性的弱点》(四)上
- 离散信号内插和抽取Matlab,抽取与内插的频谱分析
- Spring Boot使用宝兰德BES进行改造和部署
- J-Link 安装和配置
- 三层交换机 原理解析
- python群控手机_(干货)带你用 Python 实现自动化群控(零基础入门篇)
- PDF可以转PPT吗?PDF转PPT简单方法推荐
- iOS获取UDID的方法
- 校园网自动登陆(河南科技学院)
- Nmap网络扫描实验
热门文章
- NetFPGA-SUME下reference_nic测试
- 阿里笔试之Java分词统计
- Android问题集锦之二十 Activity has leaked window that was originall
- 网站URL如何SEO优化
- 一款自制calendar插件
- cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗
- 苹果电脑App Store下载失败
- mysql_wp_replication_tutorial
- wifi连接状态android,判断android设备wifi连接状态
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发