C++的auto究竟是何方神圣

news2024/11/24 14:08:22

C++的auto究竟是何方神圣

  • 前言🙌
      • auto(C++ 11) 的使用细则
        • auto是什么?
      • auto声明的变量是在什么时期被编译器推导出来呢?
        • 为什么使用auto进行定义变量时,必须进行初始化?
      • auto 的使用场景
        • auto与指针和引用结合使用的场景
        • 在一行中定义多个变量。
      • auto不能推导类型的场景有哪些?
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下! 都是精华内容,可不要错过哟!!!😍😍😍

auto(C++ 11) 的使用细则

auto是什么?

auto最早产生的,其实是在C++98,后面C++对auto进行了全新的定义。本篇文章讨论的是C++ 11的auto。auto,主要是用来自动推导类型的一个关键字。随着程序越来越复杂,程序中用到的类型的也越来越复杂。主要体现在:

  • 类型太长;
  • 含义不明确容易出错。

有人可能会说,可以用typedef来给类型定义,但是我们有这样的现实需求:在编程时,我们常常要把表达式的值赋值给变量。这就要求在声明变量的时候,必须知道表达式值的类型。因此,单单靠typedef是无法满足的。而C++11的auto就可以根据表达式的值自动推导出类型。仅仅使用auto就能够代替一长串的类型名,简化了代码,也不容易出错。

auto声明的变量是在什么时期被编译器推导出来呢?

在C++11中,auto不再是C++98中做一个存储类型指示符,而是作为一个新的类型指示符来指示编译器。auto声明的变量是在编译期由编译器推导出来的。

为什么使用auto进行定义变量时,必须进行初始化?

因为在编译阶段,编译期需要根据表达式的结果推导出auto的实际类型。因此,auto比非是是一种"类型"声明,是类型声明时的占位符。当在编译时期,再替换为其实际类型。

auto 的使用场景

auto与指针和引用结合使用的场景

用auto声明初始化指针时,用auto 和auto* 都没有任何的区别。但是,用auto声明初始化引用时,auto必须加&。

这里举一个例子:

int main()
{
	int x = 10;
	auto a = &x;
	auto* b = &x;
	auto& c = x;
	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;

	return 0;
}

上段程序的运行结果为:

在这里插入图片描述

在一行中定义多个变量。

auto支持在一行中同时定义多个变量。但是需要注意的是,这些变量必须都是同一个类型的变量。因为编译器智慧根据auto第一个变量进行对其类型的推导,然后根据推导出的类型去定义后面的变量。如果前后变量类型不一样就会导致编译错误。

    auto a = 1, b = 2;
	auto c = 1.1, d = 2.2;
	cout << a << " " << b << endl;
	cout << c << " " << d << endl;

在这里插入图片描述

  • 注意不要和C++98的auto混淆。C++11给auto进行了全新的定义,只保留了auto作为类型指示符的用法。
  • auto在范围for中起到非常重要的作用。也在lambda表达式等进行搭配使用。
	auto a = 1.1, b = 2;
	auto c = 1.1, d = 2.2;
	cout << a << " " << b << endl;
	cout << c << " " << d << endl;

在这里插入图片描述

auto不能推导类型的场景有哪些?

  • auto不能用来作为函数的参数。 原因:因为编译器不能够对auto什么的变量进行实际类型的推导。
  • auto不能直接用来声明数组。

总结撒花💞

   希望大家通过阅读此文有所收获
   😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gitee分支合并

合并dev分支到master&#xff08;合并到主分支&#xff09; git checkout master git merge dev //这里的dev表示你的分支名称 git push //推送到远程仓库 效果如下图 不报错就表示推送成功了&#xff0c;希望能帮助各位小伙伴

Flamingo

基于已有的图像模型和文本模型构建多模态模型。输入是图像、视频和文本&#xff0c;输出是文本。 Vision encoder来自预训练的NormalizerFree ResNet (NFNet)&#xff0c;之后经过图文对比损失学习。图片经过图像模型的输出是2D grid&#xff0c;视频按1FPS的频率采样后经过图…

python优雅地爬虫

申明&#xff1a;仅用作学习用途&#xff0c;不提供任何的商业价值。 背景 我需要获得新闻&#xff0c;然后tts&#xff0c;在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路&#xff1a;获得html内容-> python的工具库解析&#xff0…

Running Homebrew as root is extremely dangerous and no longer supported

Running Homebrew as root is extremely dangerous and no longer supported 查看磁盘所有信息 在使用homebrew安装smartmontools&#xff0c;查看Mac磁盘信息&#xff0c;包括mac磁盘写入量、mac磁盘健康、磁盘启动次数等&#xff0c;遇到的问题及解决方案 使用brew install s…

单片机开发 esp8266

一、固件界面 二、项目介绍 固件名称&#xff1a;esp8266-universalboard v1.0 提供商&#xff1a; 半条虫(466814195) 下载&#xff1a;esp8266-universalboard.bin 源码地址&#xff1a;Gitlab

STM32 F103C8T6学习笔记1:开发环境与原理图的熟悉

作为一名大学生&#xff0c;学习单片机有一段时间了&#xff0c;也接触过嵌入式ARM的开发&#xff0c;但从未使用以及接触过STM32C8T6大开发使用&#xff0c;于是从今日开始&#xff0c;将学习使用它~ 本文介绍STM32C8T6最小系统开发环境搭建注意问题&#xff0c;STM32C8T6单片…

TCP的四次挥手与TCP状态转换

文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候&#xff0c;在程序中使用close()函数&#xff0c;会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的&#xff0c;所以断开的时候也是双向的。 步骤 三次…

dueling network原理和实现

算法原理&#xff1a; Q ( s , a ; θ , α , β ) V ( s ; θ , β ) ( A ( s , a ; θ , α ) − max ⁡ a ′ ∈ ∣ A ∣ A ( s , a ′ ; θ , α ) ) . \begin{gathered}Q(s,a;\theta,\alpha,\beta)V(s;\theta,\beta)\left(A(s,a;\theta,\alpha)-\max_{a\in|\mathcal{A}…

网络编程(JavaEE初阶系列10)

目录 前言&#xff1a; 1.网络编程的基础 1.1为什么需要网络编程 1.2什么是网络编程 1.3网络编程中的基本概念 1.3.1发送端和接收端 1.3.2请求和响应 1.3.3客户端和服务端 2.Socket套接字 2.1概念 2.2分类 3.UDP数据报套接字编程 3.1DataGramSocket API 3.2Datagr…

【刷题笔记8.8】LeetCode题目:两数之和

LeetCode&#xff08;Hot100&#xff09;&#xff1a;两个数之和 题目描述及示例&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会…

《合成孔径雷达成像算法与实现》Figure3.3

代码复现如下&#xff1a; clc clear all close all%参数设置 TBP [25,50,100,200,400]; %时间带宽积 T 1e-6; %脉冲持续时间H figure; for i 1:5% 参数计算B TBP(i)/T; % 信号带宽K B/T; % 线性调频频率alp…

分布式协议与算法——Paxos算法

目录 Paxos算法Basic Paxos算法三种角色如何达成共识&#xff08;协商过程&#xff09;小结&#xff1a; Multi-Paxos算法关于 Multi-Paxos 的思考领导者优化Basic PaxosChubby 的 Multi-Paxos 实现小结 参考 Paxos算法 Paxos论文 Paxos Made Simple 、author&#xff1a;Lesli…

中电金信发布源启·数字构建平台 全面跃升应用研发全生命周期数字生产力

6月28日&#xff0c;中电金信发布源启数字构建平台。源启数字构建平台是企业级研发全生命周期支持管理平台、工程平台、工具链平台。 面向金融等重点行业超大规模、超复杂度的数字化应用&#xff0c;源启数字构建平台通过灵活、强大的平台赋能&#xff0c;端到端支持应用研发全…

[Vulnhub] matrix-breakout-2-morpheus

目录 <1> 信息收集 <2> getshell <3> Privilege Escalation&#xff08;提权&#xff09; <1> 信息收集 nmap -sP 192.168.236.0/24 扫描一下靶机ip 靶机ip: 192.168.236.154 nmap -A -p 1-65535 192.168.236.154 扫描一下靶机开放哪些服务 开放…

SpringMVC与三层架构

目录 一、SpringMVC1.1 概述1.2 SpringMVC核心组件1.3 SpringMVC工作原理1.4 统一异常处理 二、三层架构三、MVC与三层架构3.1 三层架构与MVC的关系3.2 SSM与三层架构的对应关系 一、SpringMVC 1.1 概述 MVC 是模型(Model)、视图(View)、控制器(Controller)的简写&#xff0c…

单元测试用例分组 demo

文章目录 目标1、使用 Category 进行用例分组&#xff08;1&#xff09;设置用例组&#xff08;2&#xff09;编写测试类&#xff0c;case设置对应的用例组&#xff08;3&#xff09;编写执行类&#xff08;4&#xff09;查看运行结果&#xff08;5&#xff09;联系项目 2、参数…

一文搞懂IS-IS报文通用格式

报文格式 IS-IS报文是直接封装在数据链路层的帧结构中的。PDU可以分为两个部分&#xff0c;报文头和变长字段部分。其中头部又可分为通用头部和专用头部。对于所有PDU来说&#xff0c;通用报头都是相同的&#xff0c;但专用报头根据PDU类型不同而有所差别。 IS-IS的PDU有4种类…

Crond计划任务与用户权限提升

目录 一、Crond计划任务 二、用户权限提升 一、Crond计划任务 1&#xff09;一次性任务&#xff1a; at实现&#xff0c;atd服务 查看atd服务的状态&#xff1a;systemctl status atd 书写at任务之前要查看系统时间&#xff1a;date或者hwclock 案例&#xff1a; at ti…

git教程(第一次使用)

一、gitee和github区别 二、git使用 下载地址 windows&#xff1a;https://gitforwindows.org/ mac&#xff1a;http://sourceforge.net/projects/git-osx-installer/ 1.git初次运行前的配置 &#xff08;1&#xff09;配置用户信息 git config --global user.name "…

C#调用百度翻译API自动将中文转化为英文,按行转换

我们可以使用百度翻译API获取到翻译结果 翻译API地址&#xff1a; http://api.fanyi.baidu.com/api/trans/vip/translate 一、新建窗体应用程序TranslatorDemo&#xff0c;将默认的Form1重命名为FormTranslator。 窗体FormTranslator设计器如图&#xff1a; 窗体设计器源代码…