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

C++day2

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

C++day2

1.使用引用其实就是使用引用的对象,特别是当引用被用作初始值时,真正参与初始化的其实就是引用对象的值。

2.auto一般会忽略掉顶层const,同时底层const则会保留下来。

const int ci=i,&cr=ci;
auto b=ci;//ci的顶层const被忽略掉了
auto c=cr;//c是一个整数
auto d=&ci;//d是一个指向常量的指针(对常量对象取地址是一种底层const)

如果需要保留下来顶层const,需要明确指出:

const auto e=ci;//保留顶层const
auto &g=ci;//g是一个整型常量引用,绑定到ci
auto &h=42;//错误,不能为非常量引用绑定字面值
const auto &j=42;//正确:可以为常量引用绑定字面值

3.希望从表达式的类型推断出要定义的变量的类型,但是并不想用该表达式的值初始化变量。为了满足这一要求,C++11新标准引入了decltype;

它的作用是返回操作数的数据类型,编译器分析表达式,并得到它的类型,却不计算表达式的值。

decltype(f()) sum =x;//sum的类型就是函数f的返回类型
const int ci=0,&cj=ci;
decltype(ci) x=0;//x的类型是const int 
decltype(cj) y=x;//y的类型是const int&,y绑定到变量x
decltype(cj) z;//错误:z是一个引用,必须初始化

有些表达式将向decltype返回一个引用类型,一般来说当这种情况发生时,意味着该表达式的结果对象能作为一条赋值语句的左值:

//decltype的结果可以是引用类型
int i=42,*p=&i,&r=i;
decltype(r+0) b;//正确:加法的结果是int,因此b是一个(未初始化的)int
decltype(*p) c;//错误,c是int&,必须初始化

r是一个引用,可以将r作为i表达式的一部分,如r+0,显然这个表达式的结果将是一个具体值,而非一个引用。

//decltype的表达式如果是加上了括号的变量,结果将是引用
decltype((i)) d;//错误:d是int&,必须初始化
decltype(i) e;//正确,e是一个未初始化的int变量
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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