14.7 — 成员函数返回数据成员的引用
在第 课中,我们介绍了通过引用返回。特别是,我们指出,“通过引用返回的对象必须在函数返回后仍然存在”。这意味着我们不应该通过引用返回局部变量,因为局部变量销毁后引用将悬空。然而,它……
13.15 — 别名模板
在第 课中,我们讨论了类型别名如何让我们为现有类型定义别名。为所有模板参数都明确指定的类模板创建类型别名就像普通的类型别名一样工作: #include <iostream> template <typename T> struct Pair { T first{}; T ……
17.13 — 多维 std::array
在上一课()中,我们讨论了 C 风格多维数组。 // C 风格二维数组 int arr[3][4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }}; 但如您所知,我们通常希望避免使用 C 风格数组(除非它们是……
17.6 — std::array 和枚举
在第 课中,我们讨论了数组和枚举。既然我们的工具包中有了 constexpr std::array,我们将继续讨论并展示一些额外的技巧。使用 static assert 确保数组初始化器的数量正确。当使用 CTAD 初始化 constexpr std::array 时,编译器将……
17.5 — 通过 std::reference_wrapper 实现引用数组
在上一课中,我们提到数组可以包含任何对象类型的元素。这包括具有基本类型(例如 int)的对象和具有复合类型(例如指向 int 的指针)的对象。 #include <array> #include <iostream> #include <vector> int main() { int x { 1 }; int y { 2 ……
17.4 — std::array 的类类型,以及花括号省略
std::array 不仅限于基本类型的元素。相反,std::array 的元素可以是任何对象类型,包括复合类型。这意味着您可以创建指针的 std::array,或结构体(或类)的 std::array。然而,初始化结构体或类的 std::array 往往会令人困惑……
17.3 — 传递和返回 std::array
std::array 类型的对象可以像任何其他对象一样传递给函数。这意味着如果我们按值传递 std::array,就会进行昂贵的复制。因此,我们通常通过(const)引用传递 std::array 以避免此类复制。对于 std::array,元素类型和……
17.2 — std::array 的长度和索引
在第 课中,我们讨论了标准库容器类使用无符号值表示长度和索引的不幸决定。由于 std::array 是一个标准库容器类,它也受相同问题的影响。在本课中,我们将回顾索引和获取……的长度的方法