06. 类型与声明

C++ 包含多种基本类型,如布尔值、字符、整数和浮点数。布尔值类型 `bool` 只能取值 `true` 或 `false`,但在赋值时可以接受非零值(视为 `true`)和零值(视为 `false`)。字符类型包括 `char`、`signed char`、`unsigned char`、`wchar_t`、`char16_t` 和 `char32_t`,其中 `char` 的符号性依赖于实现,可能导致意外结果。整数类型如 `int` 和 `long long` 用于表示整数值,而浮点数类型如 `double` 和 `long double` 用于表示小数值。 C++ 还支持基于基本类型的构造类型,如指针、数组和引用。用户可以自定义类型,包括数据结构、类和枚举类型。枚举类型用于表示特定值的集合,类则用于定义复杂的数据结构和行为。 C++ 的具体实现分为宿主式和独立式。宿主式实现运行在完整的操作系统上,提供完整的 C++ 标准库和系统服务支持;独立式实现运行在没有完整操作系统支持的环境中,只提供最小化的标准库和自给自足的功能。 提高可移植性的做法包括明确依赖于实现的特性,并将这些部分整理在一起,使用 `numeric_limits` 和静态断言检查特性是否依赖于实现。


05. C++概览:并发与实用功能

本文介绍了RAII(资源获取即初始化)的核心思想,即将资源的生命周期与栈对象的生命周期绑定在一起,通过对象的构造函数获取资源,在析构函数中释放资源。这样可以确保即使在发生异常的情况下,资源也能被正确释放,避免资源泄露。 文章通过一个例子展示了使用裸指针和`unique_ptr`管理资源的区别。裸指针在函数提前返回或抛出异常时可能会导致资源泄露,而`unique_ptr`则能确保资源在任何情况下都能被正确释放。 此外,文章还讨论了如何将`unique_ptr`管理的对象传递给函数或从函数中传出。通常推荐通过引用传递`unique_ptr`,以避免所有权的转移。最后,文章简要对比了`unique_ptr`和`shared_ptr`的使用场景和行为差异。


04. C++概览:容器与算法

C++标准库提供了丰富的功能,包括运行时语言支持、C标准库的修改版本、字符串和I/O流处理、容器和算法框架(如STL)、数值计算、正则表达式匹配、并发编程支持、模板元编程工具、智能指针和垃圾收集器接口、特殊用途容器等。标准库通过头文件提供,定义在`std`名字空间中。 字符串对象是可变的,支持移动构造函数、下标操作和子串操作。字符串之间可以相互比较,也可以与字符串字面常量比较。 I/O流库支持格式化字符的输入输出,内置类型和用户自定义类型都可以定义输出操作。输出运算符`<<`作用于`ostream`类型的对象,`cout`是标准输出流,`cerr`是错误报告流。输入运算符`>>`实现输入功能,`cin`是标准输入流。默认情况下,空白符会终止输入,但可以使用`getline()`函数读取整行输入。


02. C++概览:基础知识

这篇文章主要介绍了C++编程中的一些基本概念和最佳实践。首先,文章强调了初始化器列表的重要性,指出使用大括号初始化可以避免信息丢失的类型转换。接着,文章建议在声明变量时尽可能初始化,以确保变量在使用前有合适的值。 文章还讨论了C++中的两种不变性概念:`const`用于承诺不改变值,而`constexpr`则要求编译时求值,适用于需要高性能和只读内存的场景。此外,文章介绍了范围`for`循环的使用,展示了如何通过引用或拷贝遍历数组和初始化器列表。 在类型方面,文章区分了内置类型和用户自定义类型,并详细说明了结构体、类和枚举的使用方法。特别是`enum class`提供了更强的类型安全,避免了隐式类型转换。 模块化部分介绍了如何通过分离编译将接口和实现分开,以提高编译效率。文章还提到了名字空间的概念,解释了如何使用名字空间来组织代码,避免命名冲突。 最后,文章简要讨论了错误处理的方法,特别是异常的使用,强调了异常在处理运行时错误中的重要性。


03. C++概览:抽象机制

本文介绍了C++中的类和类层次的概念,包括具体类、抽象类、虚函数以及类层次的结构和用途。 1. **具体类**:允许直接在栈、静态分配的内存或其他对象中使用,可以直接引用对象并进行完整的初始化。 2. **抽象类**:含有纯虚函数的类,作为接口使用,要求派生类必须定义这些纯虚函数。抽象类的对象只能通过指针或引用访问。 3. **虚函数**:通过虚函数表(vtbl)实现动态绑定,允许派生类重新定义基类的函数。虚调用机制的效率接近普通函数调用,但会增加空间开销。 4. **类层次**:提供了接口继承和实现继承两种便利。接口继承使得派生类对象可以用于基类对象的地方,实现继承则简化了派生类的实现。 示例代码展示了如何定义和使用抽象类 `Container` 及其派生类 `Vector_container`,以及如何通过虚函数实现多态行为。类层次中的类通常在自由存储中分配空间并通过指针或引用访问。