问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++怎么区分判断方法别名

发布网友 发布时间:2022-04-28 18:50

我来回答

1个回答

热心网友 时间:2022-06-22 21:43

随着程序越来越复杂,程序中用到的类型也越来越复杂,这种复杂体现在两个方面。一是一些类型难于“拼写”,它们的名字既难记又容易写错,还无法明确体现其真实目的和含义。二是有时候根本搞不清到底需要的类型是什么,程序员不得不回过头去从程序的上下文中寻求帮助。

一、类型别名
类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了,易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。

有两种方法可用于定义类型别名。传统的方法是使用关键字typedef:

typedef double wages;//wages是double的同义词,即可以输入wages替代double
typedef wages base, *p;//base是double的同义词,p是double*的同义词
1
2
含有typedef的声明语句定义的不再是变量而是类型别名。

1.C++11新写法
C++11新标准规定了一种新的写法,使用别名声明来定义类型的别名:

using SI = Salse_item;//SI是Salse_item的同义词
1
这种方法使用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。

2.类型别名和类型的名字使用范围
类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名:

wages hourly, weekly;//等价于double hourly,weekly;
SI item;//等价于Salse_item item;
1
2
二、指针、常量和类型别名
如果某个类型的别名指代的是复合类型或常量,那么把它用到声明语句就会产生意想不到的后果。例如下面的声明语句用到类型pstring,它实际上是类型char*的别名:

typedef char *pstring;
const pstring cstr = 0;//cstr是指向char的常量指针
const pstring *ps =;//ps是一个指针,它的对象是指向char常量指针
1
2
3
上面两条声明语句的基本数据类型是const pstring,const是对给定类型的修饰。pstring实际上指向char的指针,因此,const pstring就是指向char的常量指针,而非指向常量字符的指针。

遇到一条使用了类型别名的声明语句时,人们往往会错误的尝试把类型别名替换成它本来的样子,以理解该语句的含义:

const char *cstr = 0;//是对const pstring cstr的错误理解
1
声明语句中用到了pstring时,其基本数据类型是指针。可是用char*重写了声明语句后,数据类型就变成了char,*成为了声明符的一部分。就会把结果变为const char成了基本数据类型。前后两种声明含义截然不同,前者声明了一个指向char的常量指针,改写后的形式则声明了一个指向const char的指针。

三、auto类型说明符
有时候不清楚表达式的数据类型,C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值:

//由vall和vall2相加的结果可以推断出item的类型
auto item = vall + vall2;//item初始化为vall和vall2想家的结果
1
2
编译器会根据vall和vall2相加的结果来推断item的类型。如果vall和vall2是类Sales_item的对象,则item的类型就是Sales_item。如果这两个变量都是double,则item的类型就是double。

1.使用auto类型的注意事项
使用auto也能在一条语句中声明多个变量。因为一条声明语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一样:

auto i = 0, *p = &i;//正确:i是整数,p是整型指针
auto sz = 0, pi =3.14;//错误:sz和pi的类型不一致,一个是int,一个是double
1
2
四、decltype类型指示符
有时候希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。为了满足这一要求,C++11新标准引入来第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值:

decltype((f()) sum = x; //sum的类型就是函数f的返回类型
1
编译器并不实际调用函数f,而是使用当调用发生时f的返回值类型作为sum的类型。换句话说,编译器为sum指定的类型是什么呢?就是假如f被调用的话将会返回的那个类型。

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

//decltype的结果可以是引用类型
int i = 42, *p = &i, &r = i;
decltype(r + 0) b;//正确:加法的结果是int,因此b是一个未初始化的int
decltype(*p) c;//错误:c是int&,必须初始化
1
2
3
4
2.decltype和auto区别
decltype和auto的另一处重要的区别:decltype的结果类型于表达式形式密切相关。

//decltype的表达式如果加上来括号的变量,结果是引用
int i = 42;
decltype((i)) d;//错误:d是int&,必须初始化
decltype(i) e;//正确:e是一个未初始化的int
1
2
3
4
从代码分析,如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型:如果给变量加上来一层或多层括号,编译器就会把它当成一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型。

ps:decltype((variable))(注意是双层括号)的结果永远是引用,而decltype(variable)的结果只有当variable本身是一个引用时才是引用
————————————————
版权声明:本文为CSDN博主「zongbqiu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35390297/article/details/110505909
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
耳机的价格是多少? 请问市净率是什么意思.高好还是低好? 股票中市净率高好还是低好? 市净率为什么越低越好 市净率到底是高好还是低好? airpods整盒丢了能定位吗(丢失AirPods盒子,如何定位?) “DJ”是“Dumb Jerk”缩写,它在中文里是什么意思? “DJ”指什么? “DJ”是“Daniel Jeremiah”缩写的中文意思是什么? 联想笔记本w7系统怎样改无线密码 电教办的计算机证书有用吗?就业承认吗? 爱情公寓吕子乔别称 公司的称呼,比如董事长,总经理,会计,那些,还有什么? 在魔都作为一个程序猿什么体验? 程序员有一个很好听的别名是什么 设计材料与工艺试题(含答案) 和高分子材料相关的,选什么论文题目简单? 复合材料成型过程中需注意哪些问题 这个毕业设计怎样做 关于周期性复合材料 求一篇关于复合材料的英文文献 复合材料发展要处理哪些问题? 某课题小组合成了一种复合材料的基体M的结构简式为,合成路线如下请回答下列问题:(1)有机物C分子结构 初三化学问题复合材料是什么 如何研究复合材料 lol段位白金4不打排位打匹配会掉段吗? 复合材料的问题 LOL不打排位只打匹配会不会掉胜点? 某课题小组合成了一种复合材料的基体M的结构简式为 ,合成路线如下 请回答下列问题:(1)有机物C分子 初中化学。题目。1楼 为什么铝合金不算是复合材料啊?【1】 低血糖发作——解释;吃馒头比和葡萄糖水见效快 英雄联盟排位赛久了不打会不会掉段位,要掉的话具体是多久掉,要掉多少,谢谢 c++如何给类名一个别名 C++ 在函数内给变量起别名是什么意思? 请问,公司强迫员工自愿退股是否合法? 自愿退股能拿回本金吗 有限公司自愿退股能拿回本金吗 和朋友合伙做生意亏本了现在我要退股朋友承担了所有的亏损并签的合同合不合法? 自愿放弃股权,签订协议能达到效果吗 退股需要征的其他股东的同意吗? 有限公司股东自愿退股需要哪些手续? 这样退股合法吗? 请问公司可以强制股东退股吗? 股东章程可以设置强制退股的条款吗? 股东违反刑法,公司可以强制退股吗? 用什么方法能让股东自愿退股? 合伙协议规定一方不能退股,合法否? 退股协议书有法律效益吗 合伙人中途退股金合法吗 爬虫软件介绍是什么? 爬虫类工具怎么使用,小白求解 爬虫软件是什么