【C++】详谈 auto
auto(C++11)
auto介绍
在早期,C/C++中 auto
的含义是:使用auto修饰的变量,auto是具有自动存储器的局部变量。
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
可以使用 typeid().name
去打印对象的类型。
案例分析
int TestAuto()
{return 2;
}int main()
{int a = 10; auto b = a; auto c = 'a'; auto d = TestAuto(); cout << typeid(b).name() << endl; cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;return 0;
}
输出结果
int
char
int
注意:
auto e;
无法通过编译,使用 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;*a = 20;*b = 30;c = 40;return 0;
}
输出结果
int * __ptr64
int * __ptr64
int
- 在同一行定义多个变量
在同一行定义多个变量时,这些变量必须是相同的类型,否则编译器将会报错。
因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
auto不能推导的场景
- auto 不能作为函数的参数
auto
不能直接用来声明数组
void TestAuto()
{ int a[] = {1,2,3}; auto b[] = {4,5,6};
}
- 为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
- auto在实际中最常见的优势用法就是跟C++11提供的新式for循环,还有lambda表达式等进行配合使用。
【C++】详谈 auto相关推荐
- 详谈大模型训练和推理优化技术
详谈大模型训练和推理优化技术 作者:王嘉宁,转载请注明出处:https://wjn1996.blog.csdn.net/article/details/130764843 ChatGPT于2022年1 ...
- c++中的auto关键字
auto的属性特征 #include <iostream> using namespace std;int main() {//1.auto 变量必须在定义时初始化,类似于constaut ...
- Auto ML自动特征工程
Auto ML自动特征工程 特征工程是在做机器学习训练的过程中必不可少的环节,特征工程就是找出对模型结果有益的特征交叉关系,通常特征工程需要耗费算法工程师大量的精力去尝试.针对这样的场景,PAI推出智 ...
- Auto ML自动调参
Auto ML自动调参 本文介绍Auto ML自动调参的算法介绍及操作流程. 操作步骤 登录PAI控制台. 单击左侧导航栏的实验并选择某个实验. 本文以雾霾天气预测实验为例. 在实验画布区,单击左上角 ...
- 使用Auto TensorCore CodeGen优化Matmul
使用Auto TensorCore CodeGen优化Matmul 本文将演示如何使用TVM Auto TensorCore CodeGen在Volta / Turing GPU上编写高性能matmu ...
- auto关键字详解 C++
C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...
- WPF中Auto与*的差别
Auto 表示自己主动适应显示内容的宽度, 如自己主动适应文本的宽度,文本有多长,控件就显示多长. * 则表示按比例来分配宽度. <ColumnDefinition Width="3* ...
- hibernate.hbm2ddl.auto的value
Hibernate 配置参数hibernate.hbm2ddl.auto Hibernate中的配置文件: <properties> <property name="hib ...
- C++拾趣——C++11的语法糖auto
C++是一种强类型的语言,比如变量a,如果声明它是整型,则之后只能将它作为整型来用.这和其他弱类型的语言有很大的区别,比如python中,我们可以让a在第一行是个整型,第三行是一个字符串.(转载请指明 ...
最新文章
- 如何实现立体的DataGrid和具有Windows效果的图片按钮
- 在Oracle中exception关键字,Oracle表字段有Oracle关键字出现异常解决方案
- 898. 子数组按位或操作
- JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
- Lambda 表达式详解~深入JVM实现原理
- C# combobox SelectedText值为空
- Office默认打开方式的改变方法以及安装程序莫名启动问题的权威汇总
- 小爱同学app安卓版_小爱同学手机版安卓下载_小爱同学app下载 v2.7.43 - 87G手游网...
- 古力乐简易网址导航综合搜索引擎站html源码
- 【合宙GSM模块Air202 烧录iRTU固件连接阿里云】
- python删除重复文件
- 个性化茅台之中国酒韵·十大人物
- BreederDAO 宣布与 20 多个区块链游戏建立官方合作关系
- 感性负载对电源的影响有多大?
- 人生低谷一日感悟+收获
- java课程设计qq_Java课程设计(qq聊天程序)
- 魅族MX4安装Ubuntu Touch系统
- 2022艾灸展,艾健康展,艾棒展,山东艾制品展,艾绒纺织展
- 关于频谱分析中两个重要指标:频率分辨率和时间分辨率的理解及计算
- Python简单网页爬取
热门文章
- ipad 浏览器 java_在iPad Safari上的java – onpagehide事件
- android5.1显示工具栏,讯飞输入法5.1.1805定制专属工具栏
- 关于S7200的PPI地址无法更改
- PPT(WPS演示)+Python win32com办公自动化
- Java常用操作符简介说明
- 我为何要倒行逆施,解散微信群?
- 微信小程序--两个小程序之间携带数据跳转
- 程序员团队名称和口号_在拓展活动中展现团队的洪荒之力吧!
- 【DTCC2016】谁敢横刀立马,但看超级技术宅男如何PK超红明星权志龙
- Allure report 截图