CHARLORÉ / AQUATIC MEMORY

Charloré

C++ Primer Fifth Edition notes(2)

1106 字
6 分钟
C++ Primer Fifth Edition notes(2)

2.1 基本内置类型#

1 为什么不能把内置类型看作系统提前写好的类?#

类型
├── 内置类型:int、double、char、bool……
└── 类类型:Sales_item、string、iostream 中的流类型……

两者在语言规则中属于不同类别。

对比内置类型 int类类型 Person
是否由 class 定义否是
是否具有成员否可以有
能否调用成员函数否可以
基本运算由谁规定C++ 语言直接规定类的定义决定
能否由程序员定义新的同类类型不能定义新的内置类型可以定义新类

内置类型是语言直接规定的类型,类类型是通过类定义产生的类型。

2 后缀与字面值#

后缀(suffix) 是紧跟在整数或浮点数字面值后面的字母,用来影响字面值自身的类型。

字面值类型含义
42通常是 int
42Uunsigned int
42Llong
42LLlong long
42ULunsigned long
42ULLunsigned long long

后缀属于字面量的值本身,而非变量声明的一部分。

如果写成long long value = 42,这里的 42 通常是 int,随后隐式转换为 long long。

3 浮点数字面值是什么类型?#

浮点数字面值可以使用小数形式,或使用科学计数法。

如:3.14159E0、1E3、2.5e-2,其中 E 或 e 表示以 10 为底的指数。

3.14159E0 = 3.14159 × 10⁰ = 3.14159
1E3 = 1 × 10³ = 1000
2.5e-2 = 2.5 × 10⁻² = 0.025
字面值类型含义
3.14Ffloat
3.14double
3.14Llong double

没有后缀的浮点数字面值默认是double类型。

如:float value = 3.14,初始化时需要把 double 转换为 float,可能损失精度。

4 字符字面值与字符串字面值的区别是?#

写法种类类型和内容
'A'字符字面值一个 char
"A"字符串字面值'A' 和 '\0' 构成的常量字符数组
""空字符串字面值只包含 '\0' 的常量字符数组

常数字符数组也就是常数char数组。

编译器会在每个字符串字面值的末尾自动添加空字符'\0',用于标记字符串结束。

'\n'用于字符串换行。

5 什么是转义序列?#

转义序列以反斜杠 \ 开头,用于表示不可打印字符或在语法中有特殊含义的字符。

含义转义序列
换行(newline)\n
水平制表(horizontal tab)\t
响铃(alert)\a
垂直制表(vertical tab)\v
退格(backspace)\b
双引号\"
反斜杠\\
问号\?
单引号\'
回车(carriage return)\r
换页(formfeed)\f

为什么反斜杠也需要转义?

如果要表示反斜杠字符本身,需要写两个反斜杠:

std::cout << "C:\\Users\\DESKTOP" << std::endl;

在字符字面值和字符串字面值中,一个转义序列按一个字符处理。

6 八进制与十六进制转义序列#

\ 后接一至三位八进制数字,\x 后接一位或多位十六进制数字。

数字表示字符的数值编码,一个转义序列按一个字符处理。

八进制转义序列:#

转义序列表示的字符
\7响铃
\12换行
\40空格
\115字符 M
\0空字符

例如:std::cout << '\115' << '\n';

输出:M

十六进制转义序列:#

例如:std::cout << '\x4d' << '\n';

输出:M

7 前缀与字面值#

前缀(suffix) 是紧跟在字符或字符串字面值前面的字母,用来影响字面值自身的类型。

前缀字符示例字符类型字符串元素类型
无前缀'a'charchar
LL'a'wchar_twchar_t
uu'a'char16_tchar16_t
UU'a'char32_tchar32_t
u8不用于字符—char,采用 UTF-8 编码

前缀属于字面量的值本身,而非变量声明的一部分。

例如:

'a' // char
L'a' // wchar_t
u'a' // char16_t
U'a' // char32_t
"hello" // char 数组
L"hello" // wchar_t 数组
u"hello" // char16_t 数组
U"hello" // char32_t 数组
u8"hello" // UTF-8 字符串

8 布尔字面值是什么类型?#

字面值类型含义
truebool真
falsebool假

true 和 false 本身是 bool 类型,不需要进行类型转换。

如:bool value = 1,字面值 1 是 int 类型,初始化时需要将 int 转换为 bool,结果是 true。

9 指针字面值是什么类型?#

字面值类别含义
nullptr指针字面值不指向任何对象

如:int* pointer = nullptr,nullptr 表示空指针,即该指针目前不指向任何对象。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

C++ Primer Fifth Edition notes(2)
https://charlore.cn/posts/c++-primer-fifth-edition-notes-2/
作者
路人蛃
发布于
2026-09-27
许可协议
CC BY-NC-SA 4.0

评论区