类型
布尔类型
bool与int可以隐式转换
定义:true对应1false对应0;非零整数对应true,0对应false
bool b = 6 //true
int i = false //0
在算术和逻辑表达式里,bool先转为int参与运算,再转为bool
void g()
{
bool a = true;
bool b = true;
bool x = a + b;//x=true,因为a+b=2
bool y = a | b;//y=true,因为a|b=1
}
指针也可以隐式转换为bool,非零指针true,具有0值的指针为false
字符类型
一个char有8个二进制位
signed char -128~127
unsigned char 0~255
wchar_t (?)可以储存更多的字符类型
字符文字量(字符常量):
char c = '0';
此处’0’表示c++程序运行的计算机上的字符集(?中该字符的整数值。'0’的值为48
整数类型
int,unsigned int,signed int
short int(short)
long int(long)
试图使用unsigned整形以便多获得一位来表示正整数不是好想法,通过将整形声明为unsigned来保证某些值总是为正的企图常常被隐藏的类型转换规则破坏
整形文字量:十进制,八进制,十六进制和字符文字量
编译器会对文字量过长,无法表示的情况给出警告
以0x开头的表示十六进制,大小写不区分
以0开头的标识八进制
后缀U可以显示写出unsigned文字量,L可以显示写出long文字量
浮点类型
单精度float
双精度double
扩展精度long double
浮点文字量:默认类型为double
需要float类型的浮点文字量加后缀f或F
需要long double类型的浮点文字量加后缀l或L
大小
在不同机器以及不同编译器的环境中类型的大小不一定相同(?
C++对象的大小是用char的大小的倍数表示的,按照定义char的大小为1(字节)。使用C++标准库的基本类型大小满足:
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)
保证char至少有8位,short至少有16位,long至少有32位
void
没有类型为void的对象
void x;//错误
void f();//函数f无返回值
void* pv;//指向类型不明的对象的指针
枚举
声明:
enum myEnum//可以不命名
{
A,B,C
};
每一个枚举都是独立的类型,枚举符的类型就是它所在的那个枚举
枚举可以用整形的Constant-expression(常量表达式来初始化)
1.在未初始化的时候枚举符所赋的值从0递增
2.若所有枚举符的值非负,则枚举表示的范围为[0,
2
k
2^k
2k-1],其中
2
k
2^k
2k是能使所有枚举符位于此范围内最小的2的k次幂
3.若存在枚举符的值为负,则枚举表示的范围为[
−
2
k
-2^k
−2k,
2
k
2^k
2k-1]
enum {A,B} //[0,1]
enum {A=3,B=9}//[0,15]
enum {A=-10,b=1000000}//[-1048576,1048575]
一个整型值可以显式转为枚举值。除非这种转换的结果位于枚举的范围之外,否则是无意义的
enum flag {x=1,y=2,z=4,e=8}
flag f1 = 5;//类型错
flag f2 = flag(5);//可以
flag f3 = flag(z|e);//可
flag f4 = flag(99);//无意义
一个枚举的sizeof值就是能容纳其范围的整形的sizeof,而且不会大于sizeof(int),除非某个枚举的值不能用int表示也不能用unsigned int表示
枚举是用户定义的类型,可以定义枚举的运算操作