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