C++ 词条(231 条)
关键字
alignas对齐说明符,指定变量或类型在内存中按多少字节边界存放;就像停车场规定车位必须对齐到某个刻度。
alignof查询某个类型或变量的对齐要求,即编译器会把它放在多少字节的边界上。
and逻辑与运算符 && 的替代拼写(token),两边表达式都为 true 时结果才为 true。
and_eq按位与赋值运算符 &= 的替代拼写,先把左右两边按位与,再把结果赋给左边。
asm内联汇编声明,允许在 C++ 代码中直接嵌入特定编译器/平台的汇编指令。
auto类型占位符,让编译器根据 initializer 自动推断变量类型;类型仍然固定,只是不用手写。
bitand按位与运算符 & 的替代拼写,两个操作数对应位都为 1 时结果位才为 1。
bitor按位或运算符 | 的替代拼写,两个操作数对应位只要有一个为 1,结果位就为 1。
break立刻跳出当前循环或 switch,像商场消防演习时直接出门,不再逛剩下的店铺。
caseswitch 语句中的分支标签,当 switch 表达式的值等于 case 后的常量表达式时进入该分支。
catch异常处理中的捕获子句,当 try 块里抛出匹配类型的异常时进入 catch 块执行。
char8_tC++20 引入的 UTF-8 字符类型,用来存放一个 UTF-8 编码单元。
char16_tC++11 引入的 UTF-16 字符类型,至少 16 位,用来存放一个 UTF-16 编码单元。
char32_tC++11 引入的 UTF-32 字符类型,至少 32 位,能直接表示一个 Unicode 码点。
class定义一种新类型,把数据和行为打包成一个整体,像设计一张包含姓名、年龄和问好方法的「学生卡模板」。
compl按位取反运算符 ~ 的替代拼写,把操作数的每个二进制位 0 变 1、1 变 0。
conceptC++20 概念,给模板参数加上约束条件,只有满足条件的类型才能实例化该模板。
const给变量或函数加上「只读锁」,像博物馆展品前的玻璃罩:你可以看,但不能改。
const_cast显式类型转换运算符,专门用来增加或移除对象的 const/volatile 限定;常用来调用旧接口,但修改原本 const 的对象是未定义行为。
constexpr编译期常量说明符,表示变量或函数的值/结果可以在编译期间确定,能用于需要常量表达式的地方。
continue跳过本轮循环剩余步骤,直接进入下一轮,像点名时跳过请假的同学,继续点下一位。
co_awaitC++20 协程运算符,暂停当前协程去等待一个 awaitable 完成,完成后再恢复执行;不会阻塞操作系统线程。
co_returnC++20 协程里的返回语句,用来结束协程并通过 promise 对象把结果传回调用方。
co_yieldC++20 协程运算符,把值产出给调用者后挂起,下次恢复时从挂起点继续,适合实现生成器。
decltype类型推导说明符,根据表达式的类型生成对应的类型名;引用表达式会保留引用,这是它和 auto 的主要区别。
default在 switch 中作为兜底分支;在函数声明后写 = default 表示让编译器生成默认版本的特殊成员函数。
delete释放 new 申请的堆内存,把租来的仓库退掉;指针本身还在,只是指向的内存被回收了。
dodo-while 循环关键字,先执行一次循环体,再检查条件决定是否继续;至少会执行一轮。
dynamic_cast运行时向下类型转换运算符,只能用于含虚函数的多态类型;转换失败时指针返回 nullptr,引用抛 std::bad_cast。
elseif 的「否则」分支,像自动售货机:投够钱出货,没投够就显示「请投币」。
enum枚举类型声明,把一组具名整数常量封装成一个类型;C++11 起可用 enum class 得到强类型枚举。
explicit构造函数修饰符,禁止编译器用单个实参进行隐式类型转换;想构造必须显式调用。
exportC++20 模块关键字,把声明导出到模块接口单元,让导入该模块的代码可见;C++11 之前的 export template 已被移除。
extern存储类说明符,声明一个变量或函数是在别处定义的,告诉编译器「这个名字存在,去链接时找」。
false布尔字面量,表示逻辑假;在数值上下文中会被转换成 0。
float单精度浮点类型,通常占 4 字节,有效数字约 6-7 位;精度比 double 低但占用更小。
for按次数重复执行一段代码,像洗衣机按设定程序转几圈:先初始化,再判断条件,最后走一步。
friend友元声明,授权某个函数或类访问本类的 private 和 protected 成员,打破封装但要显式授权。
goto无条件跳转到同一函数内的命名标签;它会让控制流变得难以跟踪,现代 C++ 中尽量避免。
if条件判断的分叉口,像路口的红绿灯:条件为真就直行,为假就跳过。
inline内联函数建议说明符,提示编译器把函数体直接展开到调用处,减少函数调用开销;是否采纳由编译器决定。
long长整型说明符,和 int 组合成 long int;在 Windows 上通常仍占 4 字节,在 Linux/macOS 上多为 8 字节。
mutable成员变量修饰符,允许在 const 成员函数或 const 对象中修改该成员;常用于内部缓存、计数器这类不影响对象逻辑状态的值。
namespace给名字划分独立地盘,避免不同代码库里的同名符号撞车,像两个班都有「小明」,用「一班::小明」和「二班::小明」就能分清。
new在堆里动态申请一块内存,返回指向这块内存的指针,像临时租了一间仓库放东西。
noexcept异常规范说明符,声明函数不会抛出异常;若函数还是抛了异常,程序会调用 std::terminate 终止。
not逻辑非运算符 ! 的替代拼写,把 true 变 false、false 变 true。
not_eq不等于运算符 != 的替代拼写,两边不相等时结果为 true。
nullptrC++11 引入的空指针字面量,类型是 std::nullptr_t;可以隐式转成任何指针类型,但不能转成整数。
operator运算符重载关键字,让自定义类型也能使用 +、-、[]、() 等运算符,像内置类型一样直观。
or逻辑或运算符 || 的替代拼写,左右两边有一个为 true 结果就为 true。
or_eq按位或赋值运算符 |= 的替代拼写,先把左右两边按位或,再把结果赋给左边。
protected访问说明符,被它修饰的成员不能被类外部访问,但可以被派生类访问;用于继承体系中的共享实现。
registerC++17 起 register 不再是存储类说明符,仅保留为关键字;历史上它建议编译器把变量放在寄存器里。
reinterpret_cast低级强制类型转换运算符,把对象的位模式重新解释成另一种类型;几乎不做任何安全检查,极易出错。
requiresC++20 约束关键字,给模板参数添加要求;可以用在 requires 子句或 requires 表达式中。
return函数结束并把结果送回调用处,像快递员把包裹送到后转身离开。
short短整型说明符,通常至少 16 位,常和 int 组合成 short int;能表示的范围比 int 小。
signed有符号整型说明符,表示该整型可以表示正数、负数和零;单独使用时等价于 signed int。
sizeof编译期运算符,返回类型或对象在内存中占用的字节数;不会真正执行表达式。
static让变量或函数拥有「超长记忆」:局部变量不会随函数结束消失,类成员属于整个类而不是某个对象,像班级共享的黑板擦。
static_assert编译期断言,如果条件为 false 就会在编译时报错并显示提示信息;用来在编译阶段检查约束。
static_cast显式类型转换运算符,在编译期进行相对安全的转换;用于数值转换、void* 转具体指针、上行转换等明确场景。
struct和 class 类似,把相关数据打包成新类型,像快递单上的收件信息默认都是公开的,谁都能看。
switch多分支选择器,像酒店楼层按键:按 1 去 1 楼,按 2 去 2 楼,其他的去 default 楼层。
template定义泛型代码模板,像做饼干的模具:同一个模具可以压出不同口味(类型)的饼干。
this指向当前对象的指针,像每个人自我介绍时说的「我」;在成员函数里用来区分成员变量和参数同名的情况。
thread_local线程局部存储说明符,每个线程拥有该变量的独立副本,线程之间互不干扰。
throw异常抛出语句,当程序遇到无法继续的错误时,抛出一个异常对象,把控制权交给最近的匹配 catch。
true布尔字面量,表示逻辑真;在数值上下文中会被转换成 1。
try异常处理块的起始关键字,把可能抛出异常的代码包起来,后面跟一个或多个 catch 子句。
typedef类型别名声明,给已有类型起一个新名字;C++11 后更推荐使用 using。
typeid运行时类型识别运算符,返回一个 type_info 对象,用来比较类型或查看类型名;只在多态类型上能返回动态类型。
typename在模板里声明一个类型参数,或告诉编译器某个嵌套名字是类型;像点菜时明确说「这是主食」。
union联合体类型,所有成员共享同一段内存空间;给其中一个成员赋值后,读取其他成员是未定义行为(除非用公共初始序列)。
unsigned无符号整型说明符,表示该整型只能表示非负数,同样位宽下正数范围比有符号版大一倍。
using给类型起别名或把命名空间里的名字引进来,像把「中华人民共和国」简称为「中国」。
virtual声明虚函数,让子类可以重写父类的行为,像家里的遥控器:表面同一个「开机」键,不同电视实现不一样。
void表示「什么都不返回」,像外卖订单里选了「不需要餐具」;函数不返回值或指针暂时不指定具体类型时用它。
volatile易变说明符,告诉编译器该变量的值可能被程序外部因素改变,因此不要对它做激进的优化。
wchar_t宽字符类型,大小由实现决定,通常至少 16 位,用来存放扩展字符集里的一个字符。
while只要条件成立就反复执行,像电梯门一直检测「有人挡着吗」,检测到有就一直开着。
xor按位异或运算符 ^ 的替代拼写,两个操作数对应位不同为 1、相同为 0。
xor_eq按位异或赋值运算符 ^= 的替代拼写,先把左右两边按位异或,再把结果赋给左边。
类型
bool布尔类型,像电灯开关只有开和关两种状态;true 代表开,false 代表关。
char字符类型,像邮箱里的一个格子只放一封信;它只占 1 字节,装一个字符或很小的整数。
double双精度小数类型,像体重秤能显示更精细的读数;比 float 位数多,适合需要精确小数计算的场景。
int整数类型,像班级里每个学生对应一个固定座位;一个 int 通常占 4 字节,专门装不带小数的数。
访问说明符
private把类里的成员设为「内部私有」,像保险柜里的密码,只有类自己的成员函数能碰。
public把类里的成员设为「对外公开」,像商店橱窗里的商品,路人都能看到和摸到。
运算符
=赋值运算符,把右边表达式的值存到左边的变量里;左边必须是可修改的左值。
==相等比较运算符,两边相等时结果为 true;自定义类型可以重载它。
!=不等比较运算符,两边不相等时结果为 true。
<小于比较运算符,左边小于右边时结果为 true。
>大于比较运算符,左边大于右边时结果为 true。
<=小于等于比较运算符,左边小于或等于右边时结果为 true。
>=大于等于比较运算符,左边大于或等于右边时结果为 true。
+二元加法或一元正号;对数字求和,对指针表示偏移,对字符串可拼接(std::string 重载)。
-二元减法或一元负号;两个数相减,或对指针做反向偏移。
*二元乘法或一元解引用/指针声明;根据上下文区分。
/除法运算符;两个整数相除时向零截断,只保留整数部分。
%取余运算符,返回整数相除后的余数;余数的符号与被除数相同。
++自增运算符,让变量值加 1;前置 ++x 先加后用,后置 x++ 先用后加。
--自减运算符,让变量值减 1;前置 --x 先减后用,后置 x-- 先用后减。
+=加赋值复合运算符,等价于 x = x + y;对重载类型可能更高效。
-=减赋值复合运算符,等价于 x = x - y。
*=乘赋值复合运算符,等价于 x = x * y。
/=除赋值复合运算符,等价于 x = x / y;整数相除向零截断。
%=取余赋值复合运算符,等价于 x = x % y。
&&逻辑与运算符,左右两边都为 true 时结果才为 true;具有短路求值特性。
||逻辑或运算符,左右两边有一个为 true 时结果就为 true;具有短路求值特性。
!逻辑非运算符,把 true 变成 false、false 变成 true。
&按位与、取地址或引用声明;根据上下文区分三种身份。
|按位或运算符,两个操作数对应位只要有一个为 1,结果位就为 1。
^按位异或运算符,两个操作数对应位不同为 1、相同为 0。
~按位取反运算符,把操作数的每个二进制位 0 变 1、1 变 0。
<<左移运算符,把整数的二进制位向左移动指定位数;也是流插入运算符,用于输出。
>>右移运算符,把整数的二进制位向右移动指定位数;也是流提取运算符,用于输入。
<<=左移赋值复合运算符,等价于 x = x << n。
>>=右移赋值复合运算符,等价于 x = x >> n。
&=按位与赋值复合运算符,等价于 x = x & y。
|=按位或赋值复合运算符,等价于 x = x | y。
^=按位异或赋值复合运算符,等价于 x = x ^ y。
?条件运算符(三目运算符)的第一部分,根据前面的布尔条件选择两个分支之一。
:条件运算符中分隔两个分支;也用于类访问说明符、switch case 标签、继承列表等场景。
->成员访问运算符,通过指针访问对象的成员;等价于先解引用再用点号。
::作用域解析运算符,用来访问命名空间、类、枚举等作用域里的名字。
符号
.成员访问运算符,用对象名直接访问它的数据成员或成员函数。
...参数包展开语法或 C 风格可变参数标记;在模板和函数中表示「任意多个」。
(左圆括号,用于函数调用、控制语句条件分组、类型转换和改变运算优先级。
)右圆括号,和左圆括号配对,结束一个分组或函数调用参数列表。
[左方括号,用于数组下标访问、lambda 捕获列表和 C++11 起的属性语法。
]右方括号,和左方括号配对,结束下标、lambda 捕获列表或属性。
{左花括号,开始一个复合语句(代码块)、初始化列表或类/函数/命名空间体。
}右花括号,结束一个复合语句、初始化列表、类/函数/命名空间体。
;语句结束符,标志一条简单语句或声明到此结束。
,逗号运算符/分隔符,用来分隔函数参数、声明列表、初始化器等;作为运算符时先算左边再算右边。
预处理
#include预处理指令,在编译前把指定头文件的内容插入到当前位置,让当前文件能使用别人的声明。
#define预处理宏定义指令,给一段文本起别名,编译前由预处理器做文本替换;也可以定义带参数的宏。
#undef预处理指令,取消之前用 #define 定义的宏,让它从该点起不再有效。
#ifdef条件编译指令,如果指定宏已被 #define 定义过,则中间的代码参与编译。
#ifndef条件编译指令,如果指定宏未被定义,则中间的代码参与编译;最常用来做头文件保护。
#if条件编译指令,根据常量整型表达式的值决定是否编译中间代码。
#else条件编译指令,和 #if/#ifdef/#ifndef 配对,当前面条件不成立时编译它后面的代码。
#elif条件编译指令,相当于 else if,当前面的 #if/#ifdef 不成立且本条件成立时编译中间代码。
#endif条件编译结束指令,标志一个 #if/#ifdef/#ifndef 块的结尾。
#pragma编译器特定指令,用来向编译器传递特殊信息或要求;不同编译器支持不同。
#error预处理错误指令,当预处理器遇到它时直接停止并显示指定的错误信息。
预处理指令所有以 # 开头的预处理指令的统称;在正式编译前由预处理器处理。
头文件
iostream标准输入输出流头文件,声明了 std::cin、std::cout、std::cerr、std::clog 等对象。
vector动态数组容器头文件,提供 std::vector,能在运行时自由改变大小。
stringC++ 字符串类头文件,提供 std::string,比 C 风格 char[] 更安全、更方便。
map有序关联容器头文件,提供 std::map,内部用红黑树实现,按键自动排序。
unordered_map无序关联容器头文件,提供 std::unordered_map,用哈希表实现,平均查找 O(1)。
set有序集合容器头文件,提供 std::set,自动去重并按升序排列。
algorithm标准算法头文件,提供 sort、find、min、max、reverse 等常用算法。
memory智能指针和内存管理头文件,提供 std::unique_ptr、std::shared_ptr、std::make_unique 等。
utility通用工具头文件,提供 std::pair、std::make_pair、std::move、std::swap 等。
iomanip输入输出格式化头文件,提供 setprecision、fixed、setw、setfill 等操控符。
sstream字符串流头文件,提供 std::stringstream、std::ostringstream、std::istringstream,像操作 I/O 一样操作字符串。
fstream文件流头文件,提供 std::ifstream、std::ofstream、std::fstream 用于读写文件。
cmath数学函数头文件,提供 std::sqrt、std::sin、std::pow、std::abs 等常见数学函数。
cstringC 风格字符串处理头文件,提供 std::strcpy、std::strlen、std::strcmp 等函数。
cstdlibC 标准库通用工具头文件,提供 std::rand、std::atoi、std::exit、std::malloc 等。
cstdioC 风格输入输出头文件,提供 std::printf、std::scanf、std::fopen 等函数。
cassert断言头文件,提供 assert 宏;条件为 false 时直接终止程序并显示位置。
functional函数对象头文件,提供 std::function、std::bind、std::placeholders、各种算术/比较/逻辑函数对象。
optionalC++17 可选值容器头文件,提供 std::optional,表示一个可能有也可能没有的值。
tuple元组头文件,提供 std::tuple,能把固定数量的任意类型值打包成一个对象。
命名空间
stdC++ 标准库的「大门」,标准库里几乎所有工具(cin、cout、string、vector)都住在这个命名空间里。
STL
常用功能
size返回容器中当前元素的数量;对 string 来说也是字符个数。
empty判断容器是否不含任何元素,空时返回 true。
clear删除容器中的所有元素,使容器变为空;size() 变成 0。
push_back在容器尾部添加一个新元素;vector 会在需要时自动扩容。
pop_back删除容器尾部的最后一个元素;容器必须非空。
front返回容器中第一个元素的引用;对 vector/deque/string 等顺序容器有效。
back返回容器中最后一个元素的引用;对 vector/deque/string 等顺序容器有效。
begin返回指向容器第一个元素的迭代器;常与 end() 一起遍历容器。
end返回指向容器末尾之后一个位置的迭代器,作为遍历结束标记,不能解引用。
insert在指定位置之前插入一个或多个元素;位置由迭代器给出。
erase删除指定位置或指定范围的元素;返回被删除元素之后的迭代器。
find在关联容器或 string 中查找指定值/子串,返回位置或迭代器。
count统计某个值在容器中出现多少次;对 set/map 等关联容器返回 0 或 1。
at按下标访问元素,越界时会抛出 std::out_of_range 异常,比 operator[] 安全。
data返回指向容器底层连续存储首元素的指针;对 vector/string 等连续容器有效。
c_str返回 std::string 底层 C 风格字符串的 const char* 指针,以 null 结尾。
substr返回 string 从指定位置开始、指定长度的子串;省略长度则取到末尾。
append在 string 末尾追加内容,可以是字符串、子串、字符或重复字符。
resize改变容器元素个数,增大时新增元素默认初始化或按给定值初始化,减小时删除多余元素。
reserve为容器预留至少能容纳指定数量的内存空间,不改变 size,只增加 capacity。
first访问 std::pair 的第一个元素;也用于 structured binding 等场景。
second访问 std::pair 的第二个元素。
getstd::get<索引> 按编译期索引访问 tuple 元素;std::getline 用于按行读取输入。
通用兜底
字符串字符串字面量,用双引号包围的字符序列,类型是 const char[] 或 const char*。
数字数值字面量,程序中直接书写的整数、浮点数或字符编码值。
注释单行注释,从 // 开始到行尾的内容都会被编译器忽略,用来写说明。
块注释块注释,从 /* 开始到 */ 结束,可跨多行,中间内容编译器忽略。
变量变量,程序中用来存储数据的命名内存单元;必须先声明类型和名字。
函数调用函数调用,写出函数名和参数列表,让函数体执行并可能返回结果。
方法成员函数调用,通过对象或引用调用属于该对象类型的函数。
属性成员访问,通过对象名加点号读取或修改对象的数据成员。
缩进缩进只是给人看的格式,C++ 用花括号 {} 来确定语句块和作用域。
运算符运算符,C++ 中用于执行计算、比较、赋值、位操作等的特殊符号。
打开代码点读机,粘贴代码点词即查 →