TC++PL读书笔记2

第4章 类型和声明
crazyle
1、类型

2、布尔量
指针或者整数可以隐式转换到BOOL,非零转化为true,零转化为false

3、字符类型
3.1、字符文字量(字符常量)
宽字符文字量wchar_t

4、整数类型
三种形式:int,signed int,unsigned int
三种类型:short int, long int, int
4.1、整数文字量
0x:十六进制
0:八进制
限制意义不明显的常量,只是用于const和enum是好的做法

5、浮点类型
float, double, long double(扩展精度)
5.1、浮点文字量
默认使用double
加f后缀为float
加l后缀为long double

6、大小
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)
1<=sizeof(bool)<=sizeof(long)
sizeof(char)<=sizeof(wchar_t)<=sizeof(long)
sizeof(float)<=sizeof(double)<=sizeof(long double)
sizeof(N)=sizeof(signed N)=sizeof(unsigned N)
有关某个具体类型的实现,其特征可以在<limit>获得
V能在T中确切表示,则不会被截断

7、void
void是一个语法上的类型,它没有对象

8、枚举类型
enum{A,B,C,D};
枚举的范围:
书上原话:“枚举符也可以用整型的constant-expression进行初始化,如果某个枚举中所有的枚举符都是负值,则此枚举值范围[0:2^k-1],其中2^k是能是所有枚举符都在此范围内的最小的2
的幂;如果存在负的枚举值,那么它的取值范围是[-2^k:2^-1]”
取值范围的定义如下。首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的乘方,将它减去1,得到的便是取值范围的上限。
enum e1 {dark,light};//[0,1]
enum e3 {a=3,b=9};//[0,15]
enum flag{x=1,y=2,z=4,e=8};

//flag f1=5;//类型错,5不是其中的范围
flag f2=flag(5);//可以,范围内
flag f3=flag(z|e);//(8|4)??此式为何物???
flag f4=flag(99);//错,超出范围

cout<<f2<<endl<<f3<<endl<<f4<<endl;
输出是5,12,99

9、声明
声明和定义的区分
9.1、声明的结构
[描述符]基础类型 声明符[初始化式]
声明符是一个名字和可选的声明运算符组成
常见声明运算符
* 指针 前缀
*const 常量指针 前缀
& 引用 前缀
[] 数组 后缀
() 函数 后缀
声明必须有类型,后缀运算符比前缀更有约束力
9.2、声明多个名字
运算符只作用于一个单独的名字
9.3、名字
较大作用域使用详细的名字去描述变量,较小作用域可以使用简洁的名字
9.4作用域
全局变量作用域从声明的那一点开始,到整个文件结束,全局变量和块程序外围变量可以被块程序内的变量屏蔽,应尽量避免这种情况
int x=10;
void f()
{
cout<<x<<endl;
int x;
x=100;
cout<<x<<endl;
{
cout<<x<<endl;
x=1000;
cout<<x<<endl;
}
x=2000;
cout<<x<<endl;
}
cout<<x<<endl;
输出:
10
100
100
1000
2000
10
被屏蔽的全局变量可以使用::作用解析符去引用
9.5、初始化
如果没有初始化namespace,const,global将自动初始化为0
多于一个值的初始化用列表或者构造函数参数去初始化
9.6、左值和对象
对象定义随作用域消亡而消亡
9.7、typedef
为类型声明新的名字,不是一个新的类型


10、忠告
1、保持小的作用域
2、不要在一个作用域和它外围作用域使用相同的名字
3、一个声明只声明一个名字
4、较大作用域使用详细的名字去描述变量,较小作用域可以使用简洁的名字
5、避免使用看起来类似的名字
6、维持统一的命名风格
7、选择名字,反映其意义
8、如果使用内部类型表示某个可能变化的值,用typedef为它定义新的有意义的名字
9、typedef定义同义词,enum和类定义新类型
10、避免对字符大小的不必要假设0~127
11、声明必须有类型
12、小心整数大小的溢出
13、小心浮点类型的范围
14、优先使用int,而不是long int或者short int
15、优先使用double,而不是float,long double
16、优先使用char 而不是unsigned char 和signed char
17、避免做出有关对象大小的不必要假设
18、避免无符号算术
19、带着疑问去看signed to unsigned or unsigned to signed
20、带着疑问去看float to int
21、带着疑问去看大类型向小类型的转换 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值