首页 > 编程语言 >C++11 中引入的auto关键字

C++11 中引入的auto关键字

时间:2024-07-30 16:58:21浏览次数:16  
标签:11 auto C++ 关键字 编译器 推断 类型

什么是 auto 关键字?

        在 C++11 中,auto 关键字被引入作为一种类型推断的机制(在编译期间执行),它允许编译器自动推断变量的类型。

auto 使用时需要注意的问题:

1、auto 与指针和引用结合使用:

首先说一下 auto 和 auto* 为什么一样,因为在 auto a = &x; 这里 auto 类型推断为 int*,而 auto* b这里的 auto 类型推断就是 int,所以二者效果相同。

对于引用必须加 & ,结合下面这个例子说明一下:修改 c 的时候,x 的值是不会变的,所以类型推断不会是引用,只有加上 & 才是引用,修改 d 的值 x 的值也会变。

2、auto 同一行定义多个变量

同一行定义多个变量,必须是同一个类型,因为编译器只会推导第一个的类型,再根据类型定义推出其他的,如果一行定义了多个类型,编译器就会报错。

3、auto 不能作为函数参数

参数类型是在编译前确定的,auto 是在编译期间执行的。

4、auto 不能直接声明数组

数组名会退回为数组的首地址,这里就和上面的 auto* 类似,所以 auto 不会推断为数组类型,而是 int*,所以不能直接声明数组

重点:auto 特别有用的 4 种情况

1、迭代器:使用 STL 容器时(std::vector,std::map 等)时,迭代器的类型可能会非常复杂。使用  auto 可以简化代码并提高可读性

2、增强 for 循环:在增强 for 循环中,auto 可以自动推断元素的类型,使代码更简洁

3、函数返回类型推断:在 C++14 中,auto 还可以用于推断函数的返回类型

4、泛型编程:在泛型编程中,当类型参数非常复杂或者难以显示指定时,auto 可以简化代码。

总结

auto 关键字在 C++11 中的引入极大地提高了代码的可读性和编写的便捷性,特别是在处理复杂类型、泛型编程以及 STL 容器和算法时,auto 的使用可以显著简化代码

标签:11,auto,C++,关键字,编译器,推断,类型
From: https://blog.csdn.net/2301_77562764/article/details/140741524

相关文章

  • 移动端自动化之uiautomator2
    github: https://github.com/openatx/uiautomator2 [安装]pip3install-Uuiautomator2#安装UIInspector-->便于查找元素(浏览器打开https://uiauto.dev查看当前设备的界面结构)pipinstalluiautodev#启动服务uiauto.dev  [使用]importuiautomator2as......
  • C++ void的用法
    C++void用法void的意思void的用法void的意思void在英语中是无效的意思,它是一种C++数据类型,而在C++中void既可以表示空类型,又可以指定不带参数的函数:空类型:void表示不包含任何成员的空类型,常用于函数返回类型(表示不返回值)和指向空类型的指针类型。无参数函数:void......
  • Android 11 关于app的权限重置
    Android11Google针对权限系统又加了更多的限制,比如1.权限的单次授权;2.某个app长时间不使用,权限会被自动更新/重置!关于app的权限重置AndroidFramework权限篇四之AppOps机制Settings里面关于app权限重置的switch流程./packages/apps/Settings/src/com/android/settings/......
  • P3811 【模板】模意义下的乘法逆元 题解
    【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定n,pn,pn,p求......
  • C++ - VS2019配置pthread线程库
    1.说明在VS里用MS编译器不能直接调用pthread库,需要先自行下载该库:http://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip解压后用得到的只有Pre-built.2文件夹下的文件。2.配置如下图分别配置三大项:包含目录-->...pthreads-w32-2-9-1-release\Pre-bu......
  • 洛谷题单指南-前缀和差分与离散化-P3017 [USACO11MAR] Brownie Slicing G
    原题链接:https://www.luogu.com.cn/problem/P3017题意解读:将一个r*c的矩阵,横向切成a条,每一条纵向切除b块,计算每一块子矩阵之和的最小值最大是多少。解题思路:要计算最小值中最大的,直觉上可以采用二分,下面来分析单调性:给定一个子矩阵块之和的值,值越小可以划分的条数、块数就越多......
  • C++(常量成员函数)
    目录1.声明与定义2.常量成员函数的特点3.常量成员函数的使用4.关键字mutable5.总结在C++中,常量成员函数(constmemberfunction)是指在函数声明的尾部加上const关键字的成员函数。这种函数不能修改类的成员变量,也不能调用会修改类成员变量的其他成员函数。常量成员函数保......
  • Win11系统C盘拒绝访问或打不开怎么办???
    在使用Win11系统的时候,有用户可能会遇到C盘拒绝访问或者无法打开的情况,因此可能会感到困惑和无助。而这通常是由于权限设置问题或者其他系统错误导致的。不过,不必过于担心,因为这种情况通常可以通过一些简单的步骤来解决,一起来看看吧。C盘拒绝访问或打不开的解决方法方......
  • Win11关闭BitLocker加密操作方法
    在Win11电脑操作中,许多新手用户不知道要如何操作才能成功关闭BitLocker加密?这时候就打开Win11系统命令提示符窗口,然后输入命令执行即可,也可以点击进入系统的控制面板,找到BitLocker驱动器加密选项,在这里进行关闭操作。以下就是Win11BitLocker加密关闭操作方法的详细介绍。Win......
  • C++入门基础—(命名空间,输入输出,缺省参数,函数重载)
    目录1.1 C++发展史1.2C++版本更新1.3C++学习参考文档1.4C++的第一个程序2命名空间2.1命名空间的价值2.2namespace的定义1.命名空间中可以定义变量/函数/类型2.命名空间可以嵌套3.多⽂件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀......