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关键字相关推荐

  1. auto关键字详解 C++

    C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...

  2. C++ auto 关键字的使用

    C++ auto 关键字的使用 https://www.cnblogs.com/KunLunSu/p/7861330.html C++98 auto 早在C++98标准中就存在了auto关键字,那时的 ...

  3. C++11 auto 关键字学习1

    在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的. C++11 中,使用它来做自动类型推导.也就是说,使用了 aut ...

  4. c++ auto 关键字

    C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导.也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了 #inclu ...

  5. 【小白学习C++ 教程】二十、C++ 中的auto关键字

    @Author: Runsen 在 C++ 11 之前,每种数据类型都需要在编译时显式声明,在运行时限制表达式的值,但在 C++ 新版本之后,包含了许多关键字,允许程序员将类型推导留给编译器本身. 有 ...

  6. C++ auto关键字

    C++ auto关键字 1)编译器根据初始值判断变量类型 2)必须初始化 3)一条语句声明多个变量(只能有一个基本类型,const int和int属于不同类型)auto i = 0, *p = &am ...

  7. C++中auto关键字

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105010028 a ...

  8. C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))

    内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数,在编 ...

  9. 关于C/C++中的“auto”关键字

    C/C++ 98标准 C++03标准 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期.此用法是多余的,因为即使定义变量时不加" ...

  10. 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr

    文章目录 一:内联函数 (1)宏函数的缺陷 (2)内联函数的概念 (3)内联函数的特性 二:auto关键字(C++11) (1)auto简介 (2)auto使用注意事项 三:基于范围的for循环(C+ ...

最新文章

  1. vue数组转Excel表格导出
  2. activiti候选人的多个场景应用
  3. 文件包含(include require)
  4. [转载] Java中的关键字含义以及介绍
  5. Ubuntu 12.10 添加 node 应用为自启动服务
  6. Win10 安装 Tomcat 解压版
  7. 使用SnakeYAML读取yaml配置文件
  8. 美服fgo显示服务器异常,FGO日服美服错误代码合集_FGO日服美服错误代码汇总_牛游戏网...
  9. 华为交换机eth口作用_基于华为交换机的基本配置——以Eth-Trunk链路聚合技术为例.pdf...
  10. APM_Rover运行纲领分析,以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:
  11. 《人性的弱点》(四)上
  12. 离散信号内插和抽取Matlab,抽取与内插的频谱分析
  13. Spring Boot使用宝兰德BES进行改造和部署
  14. J-Link 安装和配置
  15. 三层交换机 原理解析
  16. python群控手机_(干货)带你用 Python 实现自动化群控(零基础入门篇)
  17. PDF可以转PPT吗?PDF转PPT简单方法推荐
  18. iOS获取UDID的方法
  19. 校园网自动登陆(河南科技学院)
  20. Nmap网络扫描实验

热门文章

  1. NetFPGA-SUME下reference_nic测试
  2. 阿里笔试之Java分词统计
  3. Android问题集锦之二十 Activity has leaked window that was originall
  4. 网站URL如何SEO优化
  5. 一款自制calendar插件
  6. cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗
  7. 苹果电脑App Store下载失败
  8. mysql_wp_replication_tutorial
  9. wifi连接状态android,判断android设备wifi连接状态
  10. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发