《C++避坑神器·十》auto用法看这篇就够

本文详细介绍了C++中auto的关键作用,包括自动类型推断、在遍历容器和函数模板中的应用,以及auto作为返回值占位符的特性。同时,列举了auto使用中需要注意的几点规则。

文章目录

📢博客主页: 主页
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 梦回阑珊 原创,首发于 优快云,转载注明出处🙉
📢代码改变世界,你来改变代码!✨

概要

auto用法大全

技术细节

在不知道返回类型是什么的时候可以用auto自动匹配类型

int a = 10;
auto b = a; //自动类型推断,auto为int型
cout << typeid(b).name() << endl; //int

auto自动把b推导为int型

不同场景中的auto用法

.场景一:
通常我们在遍历容器的时候写法如下:

int main()
{
	vector<string> vs;
	for (vector<string>::iterator it = vs.begin(); it != vs.end(); it++)
	{
		//...
	}
}

这种写法比较繁琐,这时可以用auto代替vector< string>::iterator

int main()
{
	vector<string> vs;
	for (auto it = vs.begin(); it != vs.end(); it++)
	{
		//...
	}
}

也可以通过C11的方式遍历容器或者数组:

int main()
{
	vector<int> vs = {1,2,3,4,5};
	for (auto it : vs)
	{
		cout << it << endl;
	}
}

.场景二:
auto也会在函数模板中得到应用:
在函数模板中因为传参不知道啥类型,可以用auto来接收

template<typename Tx, typename Ty>
void Multiply(Tx x, Ty y)
{
	auto v = x * y;
	cout << v;
}

int main()
{
	Multiply(3, 5);
}

函数模板根据传入的参数自动推导为int型,故auto也以int型来接收。

auto也可以作为函数模板的返回值:

template<typename Tx, typename Ty>
auto Multiply(Tx x, Ty y)->decltype(x * y)
{
	return x * y;
}

int main()
{
	cout << Multiply(3, 5);
}

当函数模板的返回值依赖于函数模板的参数时,我们依旧无法在编译代码前确定模板参数的类型,故也无从知道模板返回值的类型,这时我们可以用auto。
decltype操作符用于查询表达式的数据类型,也是C++11引入的新的运算符,其目的也是解决泛型编程中有些类型由模板参数决定,而难以表示它的问题。
auto在这里的作用也称返回值占位,它只是为函数返回值占了一个位置,真正的返回值是后面的decltype(x * y)。为何要将返回值后置?如果没有后置,则函数声明为:
decltype(x* y) Multiply(Tx x, Ty y)
而此时x, y还没有声明,编译无法通过。

auto使用中需要注意的地方

1、auto定义就要初始化
2、把一个引用赋值给auto,auto会自动过滤引用
Int a = 10;
Int& b = a; //b==10
auto c = b; //把一个引用赋给c,但auto会自动过滤引用,此时c类型为int不是int&
auto & d = b; //d的类型为int&
3、auto会自动过滤const和volatile
在这里插入图片描述
4、初始化表达式为数组时,auto关键字推导类型为指针
在这里插入图片描述
5、auto不能作为模板参数或函数参数
6、auto不是一个真正的类型,仅仅是一个占位符,不能使用一些以类型为操作数的操作符
cout << sizeof(auto) << endl; //错误
cout << typeid(auto).name() << endl; //错误

在这里插入图片描述 在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦回阑珊

一毛不嫌多,一分也是爱

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

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

打赏作者

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

抵扣说明:

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

余额充值