目录
基本内置类型
1.算术类型:整型(包括字符型和布尔类型)和浮点型。
带符号类型和无符号类型
类型转换
含有无符号类型的表达式
字面值常量
整型和浮点型字面值
字符和字符串字面值
转义序列(均以反斜线开始)
指定字面值的类型
布尔字面值和指针字面值
变量
初始值
在创建对象时获得一个特定的値叫这个对象被初始化初始化不是赋值,初始化是创建变量时赋予一个初始值,而赋值是把对象当前値擦除以一个新値代替。
列表初始化
默认初始化
变量的声明和定义的关系
标识符
名字的作用域
复合类型
引用的定义
指针
获取对象的地址
利用指针访问对象
空指针
赋值和指针
其他指针操作
指针如何比较大小
void* 指针
理解复合类型的声明
涉及指针和引用的声明一般有两种写法
指向指针的指针
指向指针的引用
const限定符
const的引用
初始化和对const的引用
对const的引用可能引用一个非const的对象
指针和const
const指针
顶层const
constexpr和常量表达式
constexpr变量
指针和constexpr
类型别名
auto类型说明符
decltype类型指示符
decltype和引用
自定义数据结构
类数据成员
自定义Sales_data类型
添加两个Sales_data对象
自定义头文件
预处理器概述
算术类型尺寸表详情见书P30
布尔类型的取值是真(ture)和假(false)。
一个基本字符类型char大小和一个机器字节序一样。
其他字符类型用于扩展字符集,类型char16_t和char32_t则为Unicode字符集服务(Unicode用于表示所有自然语言中字符的标准)
除了布尔型和扩展字符集外其他整型可划为带符号(signed)和无符号(unsigned)
和其他整型不同char被分成:char, signed char, unsigned char三种
注意类型char和类型signed char不一样,但是字符表现形式只有无符号和有符号,类型char是上述两种形式的哪种具体由编译器决定。
8比特的unsigned char表示0~255区间的値,8比特的signed char理论上表示-127~127但大多数计算机实际范围定为-128~127。
将一种类型转换为另一种类型的运算
bool b=42; //b为真打印1
int i=b; //i値为1
i=3.14; //i的値为3,浮点数赋给整型做了近似处理,结果仅保留小数点前的部分
double pi=i //pi値为3.0,浮点数被赋给整型时精度丢失小数部分记为0
unsigned char c=-1;
10000000 00000000 00000000 00000001 原码
11111111 11111111 11111111 11111110 反码+1得补码
11111111 11111111 11111111 11111111 补码
11111111 取后八位因为一个字节占八个比特位因为是无符号所以整型提升高位补0
00000000 00000000 00000000 11111111
//所以c値为255
signed char c2=256; //赋给带符号类型一个超出范围的値结果是未定义的,程序可能报错/崩溃/产生垃圾数据
int i=42;if(i) //true{i=0; //如果我们用非布尔的値作条件它就会自动转化为布尔值,这就是类型转换
}
//但布尔值非 0 即 1 ,所以不宜在算术转换中用布尔值
不要故意给无符号类型赋负值啊喂
当一个表达式既有无符号又有int値的话,那么那个int値会被转换为无符号数
unsigned u=10;
int i=-42;
std::cout<<i+i<<std::endl; //-42+-42输出-84
std::cout<<u+i<<std::endl; //如果int占32位,输出4294967264
-42 整型提升变为无符号数且int4字节32比特位
10000000 00000000 00000000 00101010 原码
11111111 11111111 11111111 11010101 反码+1得补码
11111111 11111111 11111111 11010110补码算出补码打印的値+10
得4294967040+214=4294967254+10所以打印4294967264
所以无符号数永远不会小于0 ,循环也如此
for (unsigned u=10;u>=0;u--)
//循环不会陷入死循环,因为u永远不小于0,循环成立 u=0减一时输出4294967295
for循环先执行后打印
可以换成while循环先判断后循环这样最后一次迭代输出0
像42这样的一看就知道是个字面值常量一望便知,字面值常量形式决定了它数据类型比如char int double
我们可以将字面值写作十,八,十六进制
以0开头整数表示八进制
以0x和0X开头的表示十六进制
20/* 十进制*/ 024/*八进制*/ 0x14/*十六进制*/
默认情况下十进制是带符号数,八和十六既可能带符号也可能不带,尽管整型字面值可以储存在带符号数据类型里,但严格来说十进制字面值不会是负数,比如-42的负十进制字面值,符号不在字面值内仅仅只是对字面值取负值。
浮点型字面值表现为小数或者科学计数法表示的指数E/e
由单引号括起来的字符是char型字面值,双引号括起来的零个或多个字符则是字符串型字面值
' a ' //字符字面值 " hi " //字符串字面值
字符串型字面值类型实际上是由常量字符构成的数组,且编译器在每个字符串后面都加上 这个空字符
如果两个字符串仅由空格,缩进或换行符分隔,它们实际上是一个整体
有两类字符不能直接使用,一种是不可打印的字符,比如退格等因为没有可视图符。另一种是有特殊含义的字符(单双引号,问号反斜线等)
转义字符有哪些
我们可以使用泛化的转义序列比如x后面跟1到3个八进制或者1到多个十六进制数字,数字表示字符对应的数值,假设使用的是Latin-1字符集就有
7 响铃 12 换行 40 空格