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、带着疑问去看大类型向小类型的转换 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值