首页

文章

C++ auto关键字

发布网友 发布时间:2024-10-24 13:31

我来回答

1个回答

热心网友 时间:2024-11-12 12:42

auto作为C++的关键字,在不同的C++标准中被赋予不同的含义。大致可以分为两个时间段:直到C++ 11之前的auto和C++ 11及以后的auto。

在C++ 98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量(自动变量在控制流进入变量作用域时系统自动为其分配存储空间,并在离开作用域时释放空间),拥有自动的生命周期。但是该作用是多余的,变量默认拥有自动的生命周期。在C++ 11中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。

自从C++ 11开始,编译器可以使用auto关键字自动推断被初始化的变量的类型。auto关键字也被称为占位类型说明符(placeholder type specifier)。通常用法是auto从初始值的类型推断变量本身的类型,变量得到一个初始值的副本。auto会将引用类型推断为值类型。为了确保是引用类型,使用auto&。auto不能推断出const修饰符,为了确保可以推断出,使用const auto。auto&可以推断出const修饰符。

字面常量(Literals)方面,从C++ 14开始,可以识别出字符串常量:从C++ 23开始,可以识别出size_t和有符号的size_t类型。类方面,可以识别出自定义的类:可以识别出list类型:类型名字比较长的类型也可以被auto轻松代替:vector的iterator类型也可以被代替:也可以很容易获得vector中的元素:指针方面,auto也可以推断出指针类型:我们也可以在auto的后面加*来提高阅读性,但是结果和上面是一样的。不论是const auto还是auto const,都是把一个指针变为常量,指针所指的内容是可变的。同样的,我们也可以用*提高可读性。

引用(References)方面,默认情况下,auto会把引用类型推断为值类型。如果你想生成一个比较大的向量(vector)的别名,使用值复制可能会出错。为了避免错误,从C++ 14以后可以使用auto&或者decltype(auto)。使用函数进行初始化的时候,也要注意这一点。const属性方面,如果只使用auto,const属性是不会被推断出来的。必须使用auto&、const auto、const auto&或decltype(auto)。

auto和decltype(auto)方面,仅仅使用auto是不能推断出常量和引用类型。我们必须使用auto&或者const auto,他们可以得到更精确的类型描述。但是有些时候,我们想要编译器自己就可以得到更精确的类型描述,就可以使用decltype(auto)。auto从变量的初始值推断变量的类型:decltype可以推断出表达式的类型,用于变量声明或注入模板。decltype(f())中的f()并没有并调用。在程序运行之前的编译时期,已经推断出是int i,vector v。

结构化绑定(Structured binding)方面,元组(tuple)可以被分解为新的变量:id、message和value被声明为int,string,和double类型。这是一个对元组成员进行命名的好的方法。也可以通过结构化绑定的方式推断出结构体成员。测试(Test)方面,可以通过实验对auto进行测试。比如检查变量类型(注意添加头文件)。为了保证可以正确的推断出变量的类型,可以使用static_assert,如果变量类型不正确,会抛出编译时错误。还可以使用typeid来检查类型是不是正确。输出结果是依赖于编译器的,在我的机器上输出i,m。为了知道他们是什么意思,可以使用命令c++filt -t。对于输出是j的情况,可以使用以下命令:会输出结果unsigned int。typeid没有typetraits可靠。

函数(Function)方面,函数的返回值使用auto来表示时,会根据return语句推断返回值类型(c++ 14)。如果一个函数只是声明了而没有定义会出现错误。如果函数的返回值有多个,不是很明确的情况下,需要明确指定返回值的类型。但是,如果在编译时支持if constexpr语句,函数可以返回不同的类型。c++ 20 允许在函数的参数中使用auto。下面的例子使用容器作为函数的参数,并且容器有size()方法,[]运算符,+运算符。结果类型是自动提升的,比如,vector加上vector是vector。

auto&&是一个通用的引用类型,既可以是左值引用,又可以是右值引用。auto和concepts方面,有时候auto需要被*,这时候我们使用concept。此时以下情况就会报错:所以下面的函数只能是参数是浮点数(float,double)的时候才可以运行。

auto在头文件中方面,在C++ 20中,一个函数的参数是auto类型是被允许的。如果函数的返回类型时auto,必须使用->运算符定义返回类型。GitHub上的一个例子函数参数的类型只和函数作用域相关,但是函数的返回类型和函数被调用的作用域相关。所以头文件中必须指出返回类型。在.cpp文件中,所有的类(此处指模板类)必须被实例化:Lambda函数方面,auto非常适用于识别lambda函数的返回类型。模板Templates方面,auto可以推断出模板函数的返回类型(c++ 14)。如果返回类型对编译器来说不是很清晰,我们可以使用decltype。声明方面,第二节几乎来自对最后一个参考文献的翻译,因为他写的太好了!

参考方面,C++ keywords: auto - cppreference.com Storage class specifiers - cppreference.com Placeholder type specifiers (since C++11) - cppreference.com Function declaration - cppreference.com Structured binding declaration (since C++17) - cppreference.com C++ auto 关键字的使用 - 自由真实个性 - 博客园 (cnblogs.com)自动变量 - 维基百科,自由的百科全书 (wikipedia.org) C++ auto 关键字的使用 (iamsorush.com)
什么叫补按揭 后按揭贷款什么意思 买房者续按揭有什么危害 加按揭是什么意思 八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 关于当兵体检的问题,男 身高168CM 体重152斤 有希望么?如果要减 减到... 分析关联交易判断上市公司利润的方法有哪些? 关联交易转移利润什么意思 ...欲吞其州县,乃大怒曰:“汝乃织席编屦之去,今辄占据大郡,与诸侯同... 怎样用手机连笔记本电脑上网,但不是用手机流量的,相当于无线网卡的那... 转移利润是什么 怎么用手机的流量连电脑无线上网 下肢训练15个动作 梦是夜的花朵撕咬换成折磨好么 ...自己可以发声的,最近优酷很火的那些明星视频模仿软件,是什么软件... 电气工程毕业出来能干什么工作,求祥! ...求网友推荐一款八九万左右的车,要求空间大点,质量好点的 红烧沙丁鱼做法大全中有哪些特别受欢迎的烹饪方法? 男生165高50公斤可以穿moncler的大童14岁款羽绒服吗 什么歌词里有马大哈 感恩情歌马大哈是哪年的歌 周杰伦"依然范特西"的歌曲都有什么? 跪求《依然范特西》的全部曲目 多湖街道基本概况 什么是航空地面设备维修专业 C++Primer第5版2.5.2节练习(auto类型说明符) c++11中为什么auto类型说明符会忽略顶层const? 旋风少女金敏珠为什么说李恩秀是倒数第四 松花蛋(皮蛋)中毒是什么原因?一般在吃后多久发病?该怎么办?_百度... 三星公主李富真,颜值能力远胜夫人金建希,可惜没她会挑男人 54岁李富真被偶遇,生图皱纹多脸型诡异,网友:还是森林北漂亮 淡黄色油漆调制方法 重庆市沙坪坝区华威外语教育培训学校课程简介 大哥,你现在在华威自动化吗? 我有想50元人民币想请专家鉴定下是否为错币 新版乌龙院之活宝传奇在哪里下载 ...可以帮我鉴定下这张100元人名币是不是错版吗?毛爷爷半张脸是金黄 ... 有哪些反映劳动人民生活悲惨艰辛的诗 贵池仰天堂有什么景点,安徽石台旅游景点 申华威的硕士都有面试吗 申请留学华威大学的难度如何? ai文件只读打不开怎么办? 学信网人脸识别怎么用? ai软件运行慢了怎么办? 石台奇峰村收费,石台慢谷景区美食推荐
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com