这一章内容还蛮多的,虽然就三十页,但看了挺久,介绍了一些C++中基础的变量,算是复习复习,巩固下基础吧。
3.1 简单变量
C++命名规则(我之前不清楚的):
以两个下划线或下划线和大写字母打头的名称被保留给实现使用(编译器及其使用的资源)。
以一个下划线开头的名称被保留给实现,用作全局标识符
C++对于名称长度没有限制(ANSI C(C99标准)有限制,只保证前63个字符有意义)
C++整型长度:
char 8位
short至少16位
int至少与short一样长(IBM PC 16位;Windows 32位)
long至少32位,且至少与int一样长
long long 至少64位,且至少与long一样长
字节的含义通常指8位的内存单元,然而C++对字节的定义与此不同。C++字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说可能取值的数目必须大于等于字符数目。ASCII码可以用8位,但Unicode需要16位,还有的甚至32位来表示一个字节。
climits头文件中包含类似
#define INT_MAX 32767
的语句行(我试了下,打印的是2147483647,不知道为啥)。define和include一样,都是预处理器编译指令。#define编译指令的工作方式与文本编辑器或字处理器中的全局搜索并替换命令相似。修改后的程序将在完成替换后被编译。(其实define是C的,c++用const比较好)C++初始化
1 2
int a = 0; int a(0);
C++11
可以使用
=
也可以不用可以不包含任何东西
有助于更好地防范类型转换错误
1 2 3 4
int a{1}; int a = {1}; int a = {};//初始化为0 int a{};
如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long,即使系统上int为32位,也应该这样做。这样当程序移植到16位系统时,就不会突然无法正常工作。
如果要以16进制或8进制显示值,需要利用cout
1 2 3 4 5 6 7
int a = 42; cout<<dec;//10 cout<<a; cout<<hex;//16 cout<<a; cout<<cot;//8 cout<<a;
常量类型会根据后缀L、LL等或者大小来确定
有趣的是,程序中输入的是M,而不是对应的字符编码77。,另外,程序将打印M,而不是77。通过查看内存可以知道,77是存储在变量ch中的值:这种神奇的力量不是来自char类型,而是来自cin和cout这些工具为您完成了转换E作。输入时,cin将键盘输入的M转换为77:输出时,cout将值77.转换为所显示的字符M:cin和cout的行为都是由变量类型引导的。
C++转义序列编码:
char在默认情况下既不是没有符号,也不是有符号。是否有符号由C++实现决定
wchar_t(宽字符类型)可以表示扩展字符集
C++11新增类型:char16_t和char32_t都是无符号的
任何数字值或指针值都可以被隐式转换为bool值。任何非零值被转换为true,零被转换为false
3.2 const 限定符
比define的优点:
能够明确指定类型
可以使用C++的作用域规则将定义限制在特定的函数或文件中
可以将const用于更复杂的类型,如数组和结构
3.3 浮点数
书写浮点数方式:
标准小数点表示法
E表示法:适合非常大的数和非常小的数,数字中不能有空格
2.52e+8
8.33e-4
7E5
浮点类型有效位:
float:至少32位,通常32位(这里的位指的是二进制位数,也就是有32个01)
double:至少48位,且不少于float,通常64位(这里的位指的是二进制位数,也就是有32个01)
long double:至少和double一样多,通常为80、96、128位(这里的位指的是二进制位数,也就是有32个01)
指数范围至少是-37到37
folat至少有6位有效位,double至少15位有效位(这里的有效位指的是10进制的,6位和15位)
浮点常量,默认为double,如果希望存float就加f或F后缀,如果希望存long double,就加l或L后缀
3.4 C++算术运算符
*、/、%优先级高于+、-
以{}方式初始化时,不允许缩窄(narrowing),比如不能把浮点数初始化给整型类型的变量
整型提升:在计算表达式时,C++将
bool, char, unsigned char, signed char, short
转换为int
当运算涉及两种类型时,较小的类型被转换为较大的类型
强制类型转换不会修改变量本身,而是创建一个新变量
- typename(value)//为C++格式,让强制类型转换像是函数调用
static_cast<>
可以将值从一种数值类型转换为另一种数值类型,例如:static_cast<long>(thorn)
,将thorn转换成long类型