C++ auto用法

news/2024/11/23 9:56:49/

文章目录

  • 1.auto作用
  • 2. auto的原理
  • 3.使用auto的细则

1.auto作用

auto关键字能够自动识别变量类型。

2. auto的原理

auto定义的变量会在编译阶段根据右值来推出auto变量的类型。

1.使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。

2.因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。

3.使用auto的细则

3.1. auto与指针和引用结合起来使用

int main()
{int a = 10;auto b = a;auto pa = &a;auto* pb = &a;auto& c = a;return 0;
}

b是auto类型,会根据a的类型推导b的类型。
pa是指针,因为auto修饰的pa会根据右值(&a)来推导出pa的类型。
auto pa = &a和 auto *pa = &a是一样的写法。只不过是:
auto *pa = &a规定pa必须是指针类型,不能是其他类型了。

auto *pa = 10;

这样的代码是错误的,auto* 规定了变量必须是指针类型。给一个10,10是一个字面量,默认是int类型。不符合规则。

3.2 在同一行定义多个变量

一行可以定义多个相同变量。

	auto a = 1, b = 3;

注意:一行的变量必须相同。

	auto c = 2, d = 3.14;

这样的代码就是错误的。

因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

3.3. auto不能作为函数的参数

因为编译器不能对形参的实际类型进行推导。

3.4auto不能作为数组的声明。

void TestAuto()
{int a[] = {1,2,3};auto b[] = {456};//错误
}

编译器不知道要开多大的空间。


http://www.ppmy.cn/news/52376.html

相关文章

SIP协议之通话转接

一、介绍 在SIP协议应用中,有一个常用的功能叫通话转接,用于将接通后的通话转给第三方接听处理。 二、原理及流程 转接是通过SIP协议的一个扩展请求方法REFER实现的。呼叫转接由RFC5589(Session Initiation Protocol (SIP) Call Control - Transfer)定义…

使用D435i深度相机运行ORB-SLAM3

下载安装链接 下载ORB-SLAM3地址: git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git eigen3多版本安装:https://blog.csdn.net/weixin_41756645/article/details/129570141 ORB-SLAM2中eigen3版本为:3.2.10版本 ORB-SLAM3中eigen3版…

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航:视图->显示框->导航窗格…

初窥Edubuntu 23.04:装有教育软件的Ubuntu桌面

导读4月20日,Edubuntu将作为Ubuntu官方口味卷土重来,作为即将发布的Ubuntu 23.04(Lunar Lobster)的一部分,所以我认为让你们先看看这个重制版中包含的内容是个好主意。 Edubuntu以前被称为Ubuntu教育版,最…

训练数据集处理

列子数据: -- https://archive.ics.uci.edu/ml/machine-learning-databases/00462/drugsCom_raw.zip 由于 TSV 只是 CSV 的一种变体,它使用制表符而不是逗号作为分隔符,我们可以通过使用csv加载脚本并delimiter在load_dataset()函数中指定参…

DJ4-1 存储器的层次结构

目录 4.1.1 存储器的层次结构 1. 主存储器(内存,主存,可执行存储器) 2. 寄存器 3. 高速缓存 4. 磁盘缓存 存储器层次结构的特点 4.1.2 存储器管理的目的和功能 1. 主存储器的分配和管理 2. 提高主存储器的利用率 3. 扩…

【JAVA学习】ThreadLocal

简介 多线程里面的一个小知识点,提供线程相关变量的存储能力,目标是类似线程本地存储(TLS),非共享,只供本线程使用,方便、快捷的一种机制。但是由于对象引用被其它线程的对象持有并修改导致的问题,不是该机…

撰写项目文档: 节省时间的技巧和模板

高质量的项目文档具有长期价值。它不仅有助于确保项目的成功,而且还可以作为未来项目和计划的参考! 项目文档是任何项目的脉搏,它连接了成功运行项目所需的一切。 文档必须足够宽泛,以便开发能够取得进展。但要足够灵活&#xf…