C++中auto用法

C++ auto用法

`本文作者Lawrence,未经作者允许禁止转载,谢谢!
以下所有内容,均来源于亲自实战和查询相关资料


一、auto是什么

auto是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。

二、使用原因

用法就类似于C#中的var关键字,在C++11标准的语法中,auto被定义为自动推断变量的类型。编程时常常需要把表达式的值赋给变量,这就要求声明变量时清楚的知道表达式的类型。然而有些情况是声明的变量的类型我们并不知道,比如在模板编程时。为了解决这个问题,C++11引入了auto类型说明符,用它来让编译器替我们去分析表达式所属的类型。auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型。

#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>

int main()
{
	auto x = 5.2; 
	std::map <int, int>m;
	for (auto it = m.begin();it != m.end(); ++it)
	{
		//....
	}
    return 0;
}

监视变量x和i发现,x被auto推断为double类型,it被auto推断为map<int,int>::iterator类型
在这里插入图片描述

三、auto的使用规则

1.注意事项

auto的自动类型推断发生在编译期,所以使用auto并不会造成程序运行时效率的降低。
auto和其他变量类型有明显的区别:
1.auto声明的变量必须要初始化,否则编译器不能判断变量的类型。这类似于const关键字。
2.auto不能被声明为返回值,auto不能作为形参,auto不能被修饰为模板参数。

2.auto在编程时真正的用法

在实际编程中我们在明确变量类型情况下,还是使用明确的类型。Auto真正在编程时的实际应用如下:
内容参考至:https://www.cnblogs.com/QG-whz/p/4951177.html

  1. **代替冗长复杂的变量声明。**如上述变量auto it代替map<int,int>::iterator类型
  2. 定义模板参数时,用于声明依赖模板参数的变量。
  3. 模板函数依赖于模板参数的返回值

3.auto的推导规则

内容参考:https://blog.csdn.net/weixin_43744293/article/details/117440727

  • 规则1:声明为auto(不是auto&)的变量,忽视掉初始化表达式的顶层const。即对有const的普通类型(int
    、double等)忽视const,对常量指针(顶层const)变为普通指针,对指向常量(底层const)的常量指针(顶层cosnt)变为指向常量的指针(底层const)。
  • 规则2:声明为auto&的变量,保持初始化表达式的顶层const或volatile 属性。
  • 规则3:若希望auto推导的是顶层const,加上const,即const auto。

个人认为,上述的推导规则,不太容易理解,本人也不太理解,可以参照参考博客中的例子进行理解,对于初学者理解auto来说,主要知道auto用来代替冗长复杂或未知的变量声明即可。


总结

以上就是auto的基本介绍,本人水平有限,如有错误,欢迎在评论区下方批评指正。本文不全是copy而来,权当是自己的复习笔记了。若是喜欢本文,就帮忙点赞吧。

  • 21
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lawrence_ly16

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值