栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++17/20 auto推导规则

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
    auto b = {1};    // b为std::initializer_list
    auto c{1};       // c为int

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号