偷懒神器:auto 的讲解

1. auto 的定义

      在c/c++11之前,auto用来修饰局部变量,表明该变量是一个自动变量,函数结束后该变量销毁
  c++11中,赋予auto全新的含义。其中表示:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

       auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译时会将auto替换为自动推导的类型

      auto关键字修饰的变量,具有自动存储器的局部变量


2. 如何使用 auto 

auto 通常是为了简化代码,不过也牺牲了一些代码可读性,所以要适当进行一些注释

auto 通常简化的都是一些较长的类型,日常所见的 int、char、double 等可以不用auto 

//auto 的用法
int main()
{map<string,string> dict;//这里可以直接使用 auto 自动推导 map<string,string>::iteratormap<string, string>::iterator mit = dict.begin();auto mit = dict.begin();return 0;
}

3. 使用 auto 的注意事项 

1. 根据初始化表达式自动推导实际数据类型
2. 一定要在定义时对其进行初始化 

3. auto在声明指针类型时,使用auto和使用auto*都可以,但用auto声明引用类型时

    则必须加&

4. 要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否      则会报错

5. auto不能作为函数定义时参数的类型,编译器无法对定义时参数的类型进行推导

6. auto不能直接声明数组

 代码演示如下:

1. 根据初始化表达式自动推导实际数据类型

int main()
{//1.根据初始化表达式自动推导实际数据类型auto i = 1;cout << "i = " << i << endl;cout << "i的数据类型是" << typeid(i).name() << endl;auto ch = 'A';cout << "ch = " << ch << endl;cout << "ch的数据类型是" << typeid(ch).name() << endl;auto db = 3.14;cout << "db = " << db << endl;cout << "db的数据类型是" << typeid(db).name() << endl;return 0;
}


2. 一定要在定义时对其进行初始化 

int main()
{//2.一定要在定义时对其进行初始化 auto x;x = 1;return 0;
}


3. auto在声明指针类型时,使用auto和使用auto*都可以,但用auto声明引用类型时则必须加&

int main() 
{//3.auto在声明指针类型时,使用auto和使用auto* 都可以,但用auto声明引用类型时则必须加 &auto m = new int(1);cout << "m = " << m << endl;cout << "m的数据类型是" << typeid(m).name() << endl;auto* n = new int(2);cout << "n = " << n << endl;cout << "n的数据类型是" << typeid(n).name() << endl;int i = 3;cout << "i = " << i << endl;cout << "i的数据类型是" << typeid(i).name() << endl;auto& j = i;cout << "j = " << j << endl;cout << "j的数据类型是" << typeid(j).name() << endl;return 0;
}


4. 要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否则会        报错

int main() 
{//4.要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否则会报错auto i = 1, j = 2;//i j 都是 int 类型,可以声明在同一行auto x = 1.0, y = 3.14f;//i 是 double 类型,y 是 float 类型,两变量类型不同会报错return 0;
}

5. auto不能作为函数定义时参数的类型,编译器无法对定义时参数的类型进行推导

class A
{
private:int i;int j;
public:int Add(auto i, auto j);
};


6. auto不能直接声明数组

int main() 
{//6.auto不能直接声明数组auto* a = new auto [10];int* b = new int[10];return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熊海1.0cmsPHP代码审计

熊海1.0cmsPHP代码审计 环境搭建 下载之后直接使用phpstduy搭建就好了 工具使用 比如使用seay审计系统 sql大多数是存在的&#xff0c;但是没有文件上传&#xff0c;这个就是需要自己去验证 漏洞审计 SQL注入 有点多&#xff0c;随便拿一个举例子 就比如我们的登录页面…

Ceres Cuda加速

文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…

日企的“目标式招聘”到底什么意思?

看到篇文章称&#xff1a;日企的目标式招聘&#xff0c;高效率招聘。这是什么意思呢&#xff1f;小编今天来跟大家讲一讲。 首先&#xff0c;日企的目标式招聘&#xff0c;其实企业也是迫不得已。一个大型企业的招聘负责人说&#xff1a;“以前我们都是认真地考察每一位应聘者&…

Vue 使用elementUI-plus el-calendar加 公历转农历 是否节假日 等

效果图&#xff1a; 1. 使用到自定文件 calendar.js /*** 1900-2100区间内的公历、农历互转* charset UTF-8* Author Jea杨(JJonlineJJonline.Cn)* Time 2014-7-21* Time 2016-8-13 Fixed 2033hex、Attribution Annals* Time 2016-9-25 Fixed lunar LeapMonth Param…

浏览器事件循环详解

1. 浏览器的进程模型 1.1. 何为进程&#xff1f; 程序运行需要有它自己的专属内存空间&#xff0c;可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 1.2. 何为线程&#xff1f…

NodeJS的安装【windows】

文章目录 1 安装包下载2 下载过程3 测试 1 安装包下载 Node.js中文网&#xff1a;https://nodejs.cn 2 下载过程 3 测试

【游戏引擎之路】登神长阶(八)——Python之旅行,休息一下,去看看新世界

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

基于huggingface和langchain快速开发大模型应用

目录 一、HuggingFace. 2 1.1定义... 2 1.2活跃度... 2 1.3 工具集... 2 二、HuggingFace工具介绍... 3 2.1 Pipelines. 3 2.1.1定义... 3 2.1.2常见参数... 3 2.2、AutoClass. 4 2.2.1定义... 4 2.2.2 支持模型架构列表... 4 三、HuggingFace案例介绍... 4 3.1基…

Midjourney小技巧-提升出图质量的常用公式

一个公式让你的Midjourney生成更具韵味的人像身影图 step1-测试&#xff1a;输入提示词 - 一个面容精致的亚洲女性 - An Asian woman with a delicate face 生成的图片还是挺唯美的&#xff0c;就是过于单调&#xff0c;稀疏平常 step2-使用公式&#xff1a; 谁谁&#xff0…

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可&#xff0c;其他的一路下一步就ok安装完毕&#xff0c;运行打开缺少 android sdk 按照提示下载即可…

C++ 继承 派生类的运算符重载

C(二十二)派生类的运算符重载 语法赋值顺序引例1:当子类,不自实现赋值运算符函数重载时,默认调用父类的赋值运算符函数引例2:子类自实现赋值运算符函数重载,不做特殊处理时,只会调用父类的赋值运算符函数.引例3:子类自实现赋值运算符函数重载,在函数体内调用父类的赋值运算符函…

【leetcode】平衡二叉树、对称二叉树、二叉树的层序遍历(广度优先遍历)(详解)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…

【Qt】如何搭建Qt开发环境

Qt的开发工具 需要搭建Qt开发环境&#xff0c;需要安装3个部分&#xff1a; C编译器&#xff08;gcc、cl.exe...&#xff09;注意&#xff0c;这里的C编译器不是指visual studio这种集成开发环境&#xff0c;编译器不等于IDE&#xff0c;编译器只是IDE调用的一个程序。Qt SDK…

将本地的业务写成成可供RPC远程调用的方法

第一步&#xff1a;首先我们先定义proto文件&#xff0c;这些proto文件将会为远程调用者提供调用的方法&#xff0c;为login方法。 2.重写UserServiceRpc类中的Login方法。 在Login中做的操作主要是&#xff0c;得到requst里面的参数&#xff0c;然后调用本地的Login方法&#…

SQL注入 报错注入、文件上传、布尔盲注、时间盲注

第7关 文件上传 ---面试官常问 1、MySQL上传shell的满足条件 如果面试官问你如何通过MySQL向网站上传一个shell脚本或者其他语言的一些脚本 ---就可以通过outfile导出的方式进行上传&#xff1b; outfile导出的前提条件&#xff1a;1、必须知道网站的物理路径&#xf…

网络编程相关

关于ipv4和v6 ipv4小细节-------公网和私有地址 端口 InetAddress 协议 UDP、TCP UDP通信程序 发送&#xff08;单播&#xff09;&#xff1a; 接收&#xff08;单播&#xff09;&#xff1a; UDP三种通信方式 单播和广播代码几乎相同&#xff0c;就是将&#xff1a; InetAddr…

【JVM基础11】——垃圾回收-说一下JVM的分代回收?

目录 1- 引言&#xff1a;分代回收1-1 什么是分代回收&#xff08;What&#xff09;1-2 为什么要用分代回收&#xff1f;&#xff08;Why&#xff09; 2- ⭐核心&#xff1a;分代回收工作机制2-1 工作机制2-2 MinorGC、Mixed GC、FullGC的区别是什么 3- 总结3-1 说一下 JVM 的分…

如何利用 ChatGPT 提高工作效率?

内容创作与总结&#xff1a; 写作辅助&#xff1a;可以帮助撰写文章、报告、邮件等各种文本&#xff0c;如为招商银行写宣传文案、写论文、写故事等。学习材料生成&#xff1a;能够生成学习材料&#xff0c;如摘要、抽认卡和测验&#xff0c;帮助学生复习和学习课程。评估和考核…

【Material-UI】深入理解useAutocomplete Hook:自定义与高级用法

文章目录 一、什么是useAutocomplete&#xff1f;导入useAutocomplete 二、基本用法代码解析 三、高级定制1. 自定义选项渲染2. 分组和排序3. 自定义输入框行为4. 与其他组件集成 四、注意事项1. 类型安全2. 性能优化 五、总结 Material-UI提供了强大的Autocomplete组件&#x…

Android 本地化、多语言切换:Localization

目录 1&#xff09;如何实现多语言切换、如何实现跟随手机语言切换而切换app语言 2&#xff09;Localization是什么 3&#xff09;不管手机语言如何&#xff0c;根据用户在App选择的语言&#xff0c;只切换App语言 4&#xff09;文字长短不一样&#xff0c;怎么办呢? 一、Lo…