pdf文档 A Primer on Initialization

118.35 KB 14 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档系统阐述了C++中的初始化机制,包括初始化的高层视图、语法和类型。不同类型的初始化方法如默认初始化、直接初始化、列表初始化、聚合初始化和零初始化分别被解释。代码示例展示了这些初始化方法在不同情境下的应用,如基本类型初始化、类对象初始化和数组初始化。特别讨论了C++11引入的统一初始化语法及其影响。
AI总结
以下是对文档《A Primer on Initialization》内容的总结,语言简洁明了,重点突出核心观点和关键信息: --- ### 《A Primer on Initialization》总结 #### 1. 初始化概述 - 初始化是C++编程中的核心概念,直接影响程序的行为和安全性。 - 不同类型的对象(基础类型、类、聚合体)在初始化方式和结果上有所不同。 #### 2. 初始化语法 - 初始化的基本语法形式包括: - `T object = value;` - `T object(value);` - `T object{value};`(C++11统一初始化语法) - `T array[] = {value1, value2, ...};` #### 3. 初始化类型 - **默认初始化**: - 基础类型:未定义行为(Undefined Behavior)。 - 类类型:调用默认构造函数(若有),否则成员未定义。 - 聚合体:逐个元素应用默认初始化。 - **直接初始化**: - 基础类型:直接用参数初始化。 - 类类型:选择最匹配的构造函数(显式或隐式)。 - 聚合体:逐个元素直接初始化。 - **值初始化**: - 基础类型:初始化为0(零初始化)。 - 类类型:调用默认构造函数。 - 聚合体:逐个元素零初始化。 - **列表初始化(C++11统一初始化)**: - 使用大括号 `{}` 初始化对象。 - 禁止 narrowing conversions(缩窄转换)。 - **零初始化**: - 对象被设置为0(或相应类型的零值)。 - **复制初始化**: - 对象从另一个对象复制初始化。 - **聚合初始化**: - 对聚合体(如数组、结构体)的逐元素初始化。 #### 4. 特殊情况与示例 - **基础类型示例**: ```cpp int a; // 未定义行为 int x = {}; // x = 0 int b(3.14); // b = 3 (截断) int c{3.14}; // 编译错误(禁止缩窄转换) ``` - **类类型示例**: ```cpp class Constr { public: int h; float s; }; Constr obj1; // Default constructor called Constr obj2{}; // h = 0, s = 0 ``` - **容器示例**: ```cpp vector vec1(5, 8); // {8, 8, 8, 8, 8} vector vec2{5, 8}; // {5, 8} ``` #### 5. 初始化的其他关键点 - **复制消除**:编译器可能优化复制过程。 - **静态初始化**:静态变量的初始化。 - **参数中的初始化**:函数参数的初始化方式。 --- 通过以上总结,可以清晰理解C++中初始化的核心机制和不同类型的初始化方式。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 2 页请下载阅读 -
文档评分
请文明评论,理性发言.