Tags:C++,《C++ Primer Plus》笔记
一、分类##
见下图,注意以下几点:
Ccaculate
char16_t
,char32_t
是C++11新增的类型。- 随着编译器和系统的不同,整型和浮点数所占的位数可能会不同,下图中只记录了可能的最小位数,以作对比。
unsigned
版本能表示的数值是signed
版本绝对值的两倍,他们就像表盘,一旦数值溢出,多余的部分将重新轮回计数。- 默认情况下,C++以
int
类型存储整数值,double
存储浮点数。
二、声明与赋值##
声明###
C++中声明值有多种方法:
(unsigned) typeName variable
(类型名 + 变量名)
unsigned
为可选为无符号值时才显式加入。用于声明一个变量。
- 整形字面量,通过类型前后缀声明创建一个常量:
#include
int main() {
using namespace std;
cout << 42 << endl;
//十进制int
cout << 0x42 << endl;
//八进制int
cout << 042 << endl;
//十六进制int
cout << 1.492E3 << endl;
//double
cout << 1492UL << endl;
//unsigned long 1492
cout << 1.492F << endl;
//float
}
用后缀时,好的编程习惯要求全部大写。
-
const (unsigned) typeName variable
加上const
操作符,显式声明并立刻赋值一个不可更改的常量,不可只声明不赋值。
赋值###
C++中赋值算术类型有两种方法:
【C++算术类型】
- 使用
=
赋值运算符:int a = 123;
- 使用列表赋值法:
int a {123};
三、整型## 整型只需要强调
char
类型。
- 用单引号
''
包括的内容为char
字面值,它等于引号内容所对应的字符集编码。wcha_t
宽字符类型用于处理较大位的字符集,它将定义为尽可能宽,用L
前缀标识:wchar_t bob = L'p';
char16_t
和char32_t
分别为16位和32位的字符类型,分别用u
和U
标识:char16_t ch1 = u'q'; char32_t ch2 = U'\U0000222B';
四、浮点数## 浮点数有两种书写方式:
当数值溢出时,将自动转换为E表示法,由于
- 使用常用的标准小数点表示法。
- E表示法,即科学计数法。
float
只保证6位有效,因此通常该情况发生于 float
。五、类型转换(重点)##
1. 初始化赋值转换#### 在用赋值运算符
=
或列表赋值法 {}
时,所给 value
值将被转化为指定的 type
类型。注意 {}
不支持缩窄转换,否则将报错。2. 表达式中的转换#### 整型计算时,小于
int
类型的值将全部转化为 int
值进行计算,大于的类型保留。这被称为整型提升。其他情况时,遵照优先级进行转化:
long double > double > float > long long > long > int > 较高级无符号 > (可容纳)较低级无符号 > 同级无符号 > 相同类型不转换后者类型将转换为前者类型,优先转化前面的比较(类型比符号优先)。
3. 参数传递转化#### 没有控制参数类型的函数,按照默认(整型
int
,浮点数 float
)情况进行转化。4. 强制类型转化(待添加)#### C++共5种,这里先记录两种
(typeName) value
(C风格)或typeName (value)
,将value
强行转化为typeName
类型。static_cast
,将(value) value
强行转化为typeName
类型。