c++17/20 auto推导规则

c++17 auto推导规则

规则1:

​ auto 声明的变量是按值初初始化。

​ 如果没有显示的使用引用,也没有指针。那么编译器在推导的时候会忽略const和volatile限定符。

const int a =10;
auto b = a;	// b 为 int, 而不是const
auto &c = a;// c 为 const int&
const auto e = a; //auto 推导的类型为int, e的类型为 const int(auto)
规则2:

​ auto声明变量初始化时。目标对象如果是引用,则忽略引用属性。

int a = 1;
int &b = a;
auto c = b;	//c为int
规则3:

​ auto和万能引用声明变量时,对于左值会将auto推导为引用类型:

int a = 1;
auto&& b = i; 	//b为int&  引用折叠
auto&& c = 5;	//C为int&& 右值引用
规则4:

​ 使用auto变量,如果对象是一个数组或者函数,则auto会被推导成对应的指针类型:

int a[1];
auto b = a;	//b为int *
int sum(int a, int b) {
	return a+b;
}
auto c = sum;  //c为 int (*)(int, int)

虽然a是数组类型,但是b会退化为指针类型,同样c也会退化为函数指针类型

规则5:

当auto关键字与列表初始化组合时。

  • 直接使用列表初始化
  • 用等号加列表初始化,列表中可以包含多个或者耽搁,auto类型被推到为std::initializer_list,请注意多个列表的时候类型必须相同.
    auto a = {1,2};  // a为std::initializer_list<int>
    auto b = {1};    // b为std::initializer_list<INT>
    auto c{1};       // c为int

另外推荐大家一个在线调试.可以断点,调试,监视
支持c++98 到 c++20的网站.
https://www.onlinegdb.com/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值