术语定义源自 ISO C++11 标准(n3337),按照语言核心、对象模型、类型系统、标准库四大领域组织。
| 术语(EN) | 术语(CN) | 定义 |
|---|
| well-formed program | 良构程序 | 按照语法规则、可诊断语义规则和单一定义规则(ODR)构建的 C++ 程序 [defns.well.formed] |
| ill-formed program | 非良构程序 | 不是良构的程序 [defns.ill.formed] |
| undefined behavior | 未定义行为 | 本国际标准对其不施加任何要求的行为 [defns.undefined] |
| unspecified behavior | 未指定行为 | 对良构程序构造和正确数据,行为取决于实现,但实现无需记录具体行为 [defns.unspecified] |
| implementation-defined behavior | 实现定义行为 | 对良构程序构造和正确数据,行为取决于实现,且每个实现必须记录 [defns.impl.defined] |
| conditionally-supported | 条件支持 | 实现不要求必须支持的程序构造 [defns.cond.supp] |
| diagnostic message | 诊断消息 | 属于实现定义的实现输出消息子集的消息 [defns.diagnostic] |
| implementation limits | 实现限制 | 实现对程序施加的限制 [defns.impl.limits] |
| locale-specific behavior | 特定于语言环境的行为 | 取决于国家、文化和语言的本地约定,每个实现必须记录的行为 [defns.locale.specific] |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| argument / actual argument / actual parameter | 实参 / 实际参数 | 函数调用表达式中由括号界定的逗号分隔列表中的表达式;或在宏调用中括号内逗号分隔列表中的预处理记号序列;或在 throw 表达式中 throw 的操作数;或在模板实例化中由尖括号界定的逗号分隔列表中的表达式、类型 ID 或模板名 |
| parameter / formal argument / formal parameter | 形参 / 形式参数 | 作为函数声明或定义的一部分或在异常处理器的 catch 子句中声明的对象或引用,在进入函数或处理器时获取值;或在函数式宏定义中紧跟在宏名后的括号内逗号分隔列表中的标识符 |
| signature | 签名 | 函数的名称、参数类型列表及外围命名空间(如有)。函数模板的签名还包括返回类型和模板参数列表。类成员函数的签名还包括所属类、cv 限定符(如有)和引用限定符(如有) |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| static type | 静态类型 | 在不考虑执行语义的情况下分析程序得出的表达式类型,仅取决于程序形式,在程序执行期间不改变 [defns.static.type] |
| dynamic type | 动态类型 | 对于泛左值(glvalue),指该泛左值表达式所引用对象的最派生类型;对于纯右值(prvalue),指该纯右值表达式的静态类型 [defns.dynamic.type] |
| object | 对象 | 存储区域。由定义、new 表达式或实现在需要时创建。对象具有存储期、生命周期和类型 [intro.object] |
| subobject | 子对象 | 对象中包含的其他对象,可以是成员子对象、基类子对象或数组元素 [intro.object] |
| complete object | 完整对象 | 不是任何其他对象的子对象的对象 [intro.object] |
| most derived object | 最派生对象 | 最派生类类型或非类类型的对象 [intro.object] |
| polymorphic object | 多态对象 | 声明或继承了虚函数的类的对象 [intro.object] |
| POD type / trivial type / standard-layout type | POD 类型 / 平凡类型 / 标准布局类型 | 在 C++11 中,POD 概念被细分为平凡可复制(trivially copyable)和标准布局(standard-layout)两类 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| lvalue | 左值 | 指定一个函数或对象的表达式,可用于取地址 |
| prvalue | 纯右值 | 不是左值的表达式,用于初始化对象或计算操作数值,不关联可识别对象 |
| xvalue | 将亡值 | 接近生命周期结束的泛左值,通常由 std::move 返回或从返回右值引用的函数调用产生 |
| glvalue | 泛左值 | 左值或将亡值的统称,具有对象或函数的身份标识 |
| rvalue | 右值 | 纯右值或将亡值的统称 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| storage duration | 存储期 | 决定对象生命周期的时间属性。分为静态存储期、线程存储期、自动存储期和动态存储期 |
| static storage duration | 静态存储期 | 对象在程序启动时分配,结束时释放。包括命名空间作用域变量和 static 局部变量 |
| thread storage duration | 线程存储期 | C++11 新增。使用 thread_local 声明的变量,每个线程拥有独立实例,随线程创建和销毁 |
| automatic storage duration | 自动存储期 | 块作用域中未声明为 static / thread_local / extern 的变量,进入块时创建,退出时销毁 |
| dynamic storage duration | 动态存储期 | 通过 new 表达式分配、delete 表达式释放的对象 |
| lifetime | 生命周期 | 对象在程序执行期间存在的运行时段。对象的生命周期在构造完成后开始、析构开始时结束 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| byte | 字节 | C++ 内存模型中的基本存储单元。至少足够容纳基本执行字符集任意成员和 Unicode UTF-8 编码的八位码元 [intro.memory] |
| memory location | 内存位置 | 标量类型的对象或非零宽度的相邻位域的最大序列 [intro.memory] |
| thread of execution / thread | 线程 | 程序中的单一控制流,包括初始顶层函数调用及其后续递归调用 [intro.multithread] |
| data race | 数据竞争 | 当两个表达式求值中的一个修改某内存位置而另一个访问或修改同一内存位置时发生 [intro.multithread] |
| sequenced before | 先序于 | 不对称、传递的求值二元关系,在单线程内引发偏序。如果 A 先序于 B,则 A 的执行必须先于 B [intro.execution] |
| happens before | 发生于…之前 | 跨线程的可见性关系,由 synchronizes-with 和 sequenced-before 关系导出 |
| atomic operation | 原子操作 | 不可分割的操作,不会发生数据竞争。包括 relaxed、acquire、release、consume、acquire-release 和 sequentially consistent 六种内存序 |
| fence | 栅栏 | 不关联特定内存位置的同步操作,分为 acquire fence、release fence 或两者兼具 |
| modification order | 修改顺序 | 特定原子对象 M 的所有修改按某个全局顺序排列 [intro.multithread] |
| forward progress | 前向进展 | 实现应确保所有未被阻塞的线程最终取得进展 [intro.multithread] |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| full-expression | 完整表达式 | 不是另一个表达式的子表达式的表达式 [intro.execution] |
| side effect | 副作用 | 访问 volatile 泛左值指定的对象、修改对象、调用库 I/O 函数或调用执行上述操作的函数,都是副作用 [intro.execution] |
| observable behavior | 可观察行为 | 对 volatile 对象的访问、文件写入和交互设备 I/O 构成程序的可观察行为 [intro.execution] |
| constant expression | 常量表达式 | 可在编译期求值的表达式,结果可用于模板参数、数组边界等需要编译期常量的上下文中 |
| ODR-used | ODR 使用 | 单一定义规则使用。当一个变量/函数在需要其定义存在的上下文中被引用时,称为被 ODR-used |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| declaration | 声明 | 向程序引入名称的构造。声明可以同时是定义 |
| definition | 定义 | 对实体提供完整描述的声明。变量定义分配存储,函数定义包含函数体,类定义包含成员声明 |
| One Definition Rule(ODR) | 单一定义规则 | 任何翻译单元不得包含同一变量/函数/类/枚举/模板的多个定义;整个程序中非内联函数或变量只能有一处定义 |
| linkage | 链接性 | 名称在不同作用域引用同一实体的能力。分为外部链接、内部链接和无链接 |
| name lookup | 名称查找 | 将程序中的名称与其声明相关联的过程。分为非限定查找、限定查找和依赖于实参的查找(ADL) |
| ADL(Argument-Dependent Lookup) | 依赖于实参的查找 | 在函数调用中,除常规作用域查找外,还在实参类型关联的命名空间中查找函数名 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| constructor | 构造函数 | 类对象创建时自动调用的特殊成员函数,负责初始化对象 |
| destructor | 析构函数 | 对象生命周期结束时自动调用的特殊成员函数,负责释放资源 |
| copy constructor | 拷贝构造函数 | 用同类型对象初始化新对象的构造函数 |
| move constructor | 移动构造函数 | C++11 新增。用右值引用的同类型对象"窃取"资源来初始化新对象 |
| copy assignment operator | 拷贝赋值运算符 | 将同类型对象的值赋给已有对象的运算符 |
| move assignment operator | 移动赋值运算符 | C++11 新增。用右值引用的同类型对象"窃取"资源来赋值 |
| virtual function | 虚函数 | 通过基类指针或引用调用时,根据实际对象动态类型分派的成员函数 |
| abstract class | 抽象类 | 包含至少一个纯虚函数的类,不能直接实例化 |
| aggregate | 聚合类 | 无用户提供的构造函数、无非静态数据成员初始化器、无私有或受保护非静态数据成员、无基类、无虚函数的类或数组 |
| POD(Plain Old Data) | 简单旧数据 | 与 C 语言兼容的数据结构,在 C++11 中拆分为 trivial 和 standard-layout 两个概念 |
| RAII(Resource Acquisition Is Initialization) | 资源获取即初始化 | C++ 核心惯用法:在构造函数中获取资源,在析构函数中释放资源,确保异常安全 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| template | 模板 | 参数化的类或函数蓝图,编译时根据模板实参生成具体代码 |
| template instantiation | 模板实例化 | 用具体实参替换模板参数生成类或函数的过程。分为隐式实例化和显式实例化 |
| template specialization | 模板特化 | 为特定模板实参组合提供不同于通用模板的实现。分为全特化和偏特化 |
| dependent name | 依赖名 | 依赖于模板参数的名称,其查找推迟到模板实例化时 |
| SFINAE(Substitution Failure Is Not An Error) | 替换失败不是错误 | 模板参数替换失败时,不导致编译错误,而是将该候选模板从候选集中移除 |
| variadic template | 可变参数模板 | C++11 新增。接受可变数量模板参数的模板,使用参数包(parameter pack)语法 |
| alias template | 别名模板 | C++11 新增。为模板类型创建别名的模板声明 |
| extern template | 外部模板 | C++11 新增。抑制模板的隐式实例化,减少编译时间 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| rvalue reference | 右值引用 | 用 T&& 声明的引用类型,可绑定到右值,是移动语义和完美转发的基础 |
| move semantics | 移动语义 | 通过"窃取"资源而非拷贝资源来优化性能的机制,依赖右值引用和移动构造函数/移动赋值 |
| perfect forwarding | 完美转发 | 使用 std::forward 将函数模板参数以其原始值类别(左值/右值)转发给另一个函数 |
| lambda expression | lambda 表达式 | 在代码中内联定义的匿名函数对象,可捕获上下文变量 |
| constexpr | 常量表达式修饰符 | 声明可在编译期求值的变量或函数 |
| auto type deduction | auto 类型推导 | 编译器从初始化表达式自动推导变量类型 |
| decltype | 声明类型 | 获取表达式或实体的声明类型,保留引用和 cv 限定符 |
| nullptr | 空指针字面量 | 类型为 std::nullptr_t 的空指针常量,替代 NULL 宏 |
| enum class(scoped enum) | 限定作用域枚举 | 具有作用域的强类型枚举,枚举值不隐式转换到 int |
| range-based for loop | 基于范围的 for 循环 | 遍历容器或数组所有元素的简洁循环语法 |
| defaulted function | 默认函数 | 用 = default 显式要求编译器生成默认实现的特殊成员函数 |
| deleted function | 删除函数 | 用 = delete 显式禁止某函数的使用或生成 |
| override | 覆盖说明符 | 标记虚函数覆盖,编译器验证基类确有对应虚函数 |
| final | 最终说明符 | 阻止虚函数被进一步覆盖或类被继承 |
| noexcept | 不抛出说明符 | 声明函数不抛出异常,编译器可据此优化 |
| static_assert | 静态断言 | 编译期条件检测,失败时给出指定错误消息 |
| delegating constructor | 委托构造函数 | 构造函数调用同类的另一个构造函数来执行初始化 |
| inheriting constructor | 继承构造函数 | 使用 using 声明将基类构造函数引入派生类 |
| non-static data member initializer | 非静态数据成员初始化器 | 在类定义中直接为非静态数据成员提供默认初始化值 |
| brace-or-equal-initializer | 花括号或等号初始化器 | 使用 {...} 或 = expr 形式的初始化器 |
| list-initialization | 列表初始化 | 使用花括号 {...} 的统一初始化语法,防止窄化转换 |
| thread_local | 线程局部存储 | 声明线程存储期变量,每个线程拥有独立实例 |
| raw string literal | 原始字符串字面量 | 使用 R"(...)" 语法的字符串,不处理转义序列 |
| explicit conversion operator | 显式转换运算符 | 用 explicit 声明的类型转换运算符,禁止隐式类型转换 |
| trailing return type | 后置返回类型 | 将函数返回类型放在参数列表之后,使用 auto 前置 + -> Type 后置语法 |
| default template argument for function template | 函数模板的默认模板参数 | C++11 允许函数模板使用默认模板参数 |
| local type as template argument | 局部类型作模板实参 | C++11 允许局部类型用作模板实参 |
| angle bracket fix | 尖括号修复 | 连续右尖括号 >> 不再歧义为右移运算符,正确解析为模板嵌套闭合 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| smart pointer | 智能指针 | 自动管理动态分配对象生命周期的类模板。包括 unique_ptr(独占所有权)、shared_ptr(共享所有权)、weak_ptr(弱引用) |
| unique_ptr | 独占指针 | C++11 新增。独占所有权的智能指针,不可拷贝,可移动 |
| shared_ptr | 共享指针 | C++11 新增。引用计数的共享所有权智能指针,最后一个 shared_ptr 销毁时释放对象 |
| weak_ptr | 弱引用指针 | C++11 新增。不增加引用计数的观察者指针,用于打破循环引用 |
| container | 容器 | 存储对象集合的类模板。分为序列容器、关联容器和无序关联容器 |
| sequence container | 序列容器 | 元素按线性顺序排列的容器:array、vector、deque、forward_list、list |
| associative container | 关联容器 | 基于红黑树实现的有序容器:set、multiset、map、multimap |
| unordered associative container | 无序关联容器 | C++11 新增。基于哈希表实现的容器:unordered_set、unordered_multiset、unordered_map、unordered_multimap |
| iterator | 迭代器 | 访问容器元素并提供遍历机制的对象。按能力分为输入 / 输出 / 前向 / 双向 / 随机访问迭代器 |
| allocator | 分配器 | 封装内存分配和释放策略的对象,容器模板以之为参数实现灵活的内存管理 |
| function object / functor | 函数对象 / 仿函数 | 重载了 operator() 的对象,可像函数一样调用 |
| std::function | 多态函数包装器 | C++11 新增。可存储、复制和调用任何可调用目标的通用函数包装器 |
| std::bind | 绑定 | C++11 新增。将函数与其部分参数绑定,生成新的可调用对象 |
| std::tuple | 元组 | C++11 新增。固定大小的异构值集合 |
| std::array | 固定大小数组 | C++11 新增。封装固定大小数组的容器,支持迭代器和标准容器接口 |
| std::forward_list | 单向链表 | C++11 新增。单向链表容器,内存开销比 std::list 更小 |
| regex | 正则表达式 | C++11 新增。支持 ECMAScript 等语法的正则表达式匹配、搜索和替换库 |
| chrono | 时间库 | C++11 新增。高精度时间点和时间间隔处理库 |
| random | 随机数库 | C++11 新增。提供多种随机数引擎和分布类型的随机数生成库 |
| atomic | 原子操作 | C++11 新增。无锁原子类型和对各种内存序的原子操作支持 |
| thread | 线程 | C++11 新增。标准线程类,支持创建、等待和分离线程 |
| mutex | 互斥锁 | C++11 新增。提供互斥访问的同步原语,包括 mutex、recursive_mutex、timed_mutex 等 |
| condition_variable | 条件变量 | C++11 新增。线程间等待 / 通知机制 |
| future / promise | 期值 / 承诺 | C++11 新增。异步任务结果传递机制。promise 端设置值,future 端获取值 |
| type traits | 类型特征 | C++11 新增。编译期类型查询和类型转换的元编程工具库 |
| initializer_list | 初始化列表 | C++11 新增。支持统一初始化语法的轻量级列表类型 |
| scoped_allocator_adaptor | 作用域分配器适配器 | C++11 新增。将外层容器的分配器传递给内层元素的适配器 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| translation unit | 翻译单元 | 源文件加上通过 #include 包含的所有头文件减去被条件编译排除的行,是编译的基本单元 |
| phases of translation | 翻译阶段 | C++ 源代码经历的 9 个翻译阶段:字符映射 → 行拼接 → 预处理分词 → 预处理执行 → 字面量转换 → 相邻字符串拼接 → 编译 → 模板实例化 → 链接 |
| macro | 宏 | 通过 #define 定义的预处理替换规则 |
| pragma | 编译指示 | 通过 #pragma 向编译器传递实现特定的指令 |
| 术语(EN) | 术语(CN) | 定义 |
|---|
| exception | 异常 | 程序执行过程中抛出的对象,用于向调用方传递错误或异常情况 |
| try-catch | 尝试捕获 | 异常处理的基本结构:在 try 块中执行可能抛出异常的代码,在 catch 块中处理异常 |
| stack unwinding | 栈展开 | 异常抛出后,从 throw 点到匹配 catch 之间销毁所有自动对象的过程 |
| exception specification | 异常规范 | 声明函数可能/不会抛出哪些异常。C++11 中用 noexcept 替代动态异常规范 |
| RAII-based exception safety | 基于 RAII 的异常安全 | 利用构造函数获取资源、析构函数释放资源的惯用法保证异常安全 |
术语编号格式说明:[defns.xxx] 为 C++11 标准中对应术语的锚点标识。 (内容由AI生成,仅供参考)