C++Primer2.5节 处理类型知识梳理

**C++Primer2.5节 处理类型知识梳理 **

2.5.1 类型别名
1、类型别名:是指给已存在的类型定义另一个名字,使其简单易懂,以便于记忆和使用。
2、类型别名定义的形式:
①传统的方法使用typedef来定义,例如;
typedef int p; //p就是int的别名,可以用来定义int型的变量。
typedef int *a;//a就是整型指针的别名,可以用a来定义指向整型对象的指针。
②使用别名声明,具体形式:using 别名=已存在的类型;
例如:using cn=const int; //cn就是const int的别名。
3、指针、常量和类型别名
①当类型别名是一个复合类型时,比如using pststring=char *;pstring是一个指向字符型对象的指针。当运行下列程序时,
typedef char *pstring;
const pstring cnt=nullptr; //相当于const char *const cnt=nullptr,表示这是一个指向字符对象的常量指针。
②注意点:
A:const是对基本类型的修饰。const修饰的是pstring,而pstring的基本类型是指针,所以const修饰的是指针,修饰后变成了常量指针。
B:不能将语句中的类型别名直接替换成其原来的类型,不然会造成对该语句的理解错误。
例如:将上面语句改写成const char *cnt=nullptr;则会把语句解释成这是一个指向字符常量的指针,初始值为0。这与原来的语句解释是完全不一样的。

2.5.2 auto类型说明符
1、定义:auto类型会自动将表达式的所属类型赋予给变量。
2、使用auto的条件:
①所以auto定义变量必须要初始化。
②在一条语句中,auto能够定义多个变量。因为一条声明语句中只能有一种基本数据类型,所以在auto定义的语句中所有变量的初始值的基本数据类型必须要相同。
3、复合类型、常量和auto。
①以引用的对象的类型作为auto的类型。
②auto一般会忽略顶层const,但会保留底层const。比如初始值是指向常量的指针。例如:
const int cn=20;
auto ci=&cn; // ci是指向整型常量的指针
③设置一个类型为auto的引用时,初始值的顶层常量属性仍然保留。和往常一样,如果我们给初始值绑定一个引用,则此时的常量就不是顶层常量了。(这句话在我单独写的另外一篇文章有解释)
④当在一条语句中定义多个变量时,要注意*和&只是声明符的一部分,不属于基本数据类型的一部分,要注意每个变量的初始值的类型要相同。

2.5.3 decltype 类型说明符
1、定义:decltype作用是选择并返回操作数的数据类型,在此过程中,编译器会分析表达式并得到它的类型,却并不实际计算出表达式的值。
2、具体形式:decltype(表达式)变量;decltype不一定进行初始化,视返回的类型而定。
3、与auto的对比:decltype处理顶层const和引用的方式与auto有些不同。表达式不同,情况就不同。
①当表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内)。例如;
const int x=10,&y=x;
deltype(x) z=0; //z是一个const int 类型的对象
deltype(y) k=x; //k是一个const int&类型的对象
注意一种特殊的情况: 当变量名加上一对括号,那么decltype则会返回引用类型。
②当表达式不是一个变量,则decltype则返回表达式结果所对应的数据类型。例如
int i=10,&j=i;
decltype(j+0) k; //则j+0表达式的结果是int型的,则decltype的返回类型是int型,而非int &;
③当表达式的结果对象能作为一条赋值语句的左值(对象可以被修改)时,decltype将会返回一个引用类型。
A:表达式的内容是解引用符(*p)时,则decltype会返回一个引用类型。例如:
int x=20,*p=x;
decltype(*p)y=x; //*p是指针指向的对象,可以作为赋值语句的左值,所以decltype返回一个引用类型。
B:表达式是加了括号的变量,此时变量是一种可以作为赋值语句的左值的特殊表达式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c primer 15.9作业是关于异常处理的内容。在这一中,主要介绍了C语言中的错误处理机制和异常处理方式。 异常处理是一种程序设计中的重要思想,它允许应对出现的各种错误或异常情况,从而增加程序的健壮性和可靠性。C语言中的异常处理主要通过使用错误码和错误处理函数来实现。 在进行异常处理时,通常需要先定义一些错误码,用于标识可能出现的异常情况。C语言提供了一些标准的错误码,如errno.h头文件中定义的错误码,还可以根据需要自定义错误码。 接下来,我们需要在程序中合适的位置进行错误检测并进行异常处理。可以使用if语句或者switch语句等条件语句来检测错误码,并根据不同的错误码执行相应的错误处理代码。 错误处理代码的内容可以根据具体情况而定,它可以是打印错误信息、修复错误、返回错误码等操作。在处理完异常后,可以继续执行后续的程序逻辑,或者返回到调用处继续处理。 除了使用错误码和错误处理函数进行异常处理外,C语言还提供了一种特殊的异常处理方式,即信号处理。信号处理是通过捕捉和处理操作系统发送的信号来实现的,通过注册信号处理函数,可以在程序遇到特定信号时执行相应的处理代码。 总之,C语言中的异常处理是一种重要的错误处理机制,可以提高程序的可靠性和健壮性。通过定义错误码、错误处理函数和信号处理,可以有效地捕捉和处理各种异常情况。在编写C程序时,合理地使用异常处理机制是至关重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值