15.10 — 引用限定符
作者注:这是一个可选课程。我们建议您大致阅读一遍以熟悉材料,但不需要完全理解即可继续学习未来的课程。在第 课中,我们讨论了调用返回数据成员引用的访问函数在以下情况下可能很危险:……
作者注:这是一个可选课程。我们建议您大致阅读一遍以熟悉材料,但不需要完全理解即可继续学习未来的课程。在第 课中,我们讨论了调用返回数据成员引用的访问函数在以下情况下可能很危险:……
在第 课中,我们介绍了按引用返回。我们特别指出:“通过引用返回的对象必须在函数返回后仍然存在”。这意味着我们不应该按引用返回局部变量,因为局部变量销毁后,引用将悬空。然而,它……
在第 课中,我们讨论了类型别名如何让我们为现有类型定义别名。为类模板创建类型别名,其中所有模板参数都明确指定,其工作方式与普通类型别名类似: #include <iostream> template <typename T> struct Pair { T first{}; T …
在上一课()中,我们讨论了 C 风格的多维数组。 // C 风格二维数组 int arr[3][4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }}; 但如你所知,我们通常希望避免 C 风格数组(除非它们是……
在第 课中,我们讨论了数组和枚举。现在我们的工具包中有了 constexpr std::array,我们将继续讨论并展示一些额外的技巧。使用 static assert 确保数组初始值设定项的数量正确。当使用 CTAD 初始化 constexpr std::array 时,编译器将……
在上一课中,我们提到数组可以包含任何对象类型的元素。这包括具有基本类型(例如 int)的对象和具有复合类型(例如指向 int 的指针)的对象。 #include <array> #include <iostream> #include <vector> int main() { int x { 1 }; int y { 2 …
std::array 不仅限于基本类型的元素。相反,std::array 的元素可以是任何对象类型,包括复合类型。这意味着您可以创建指针的 std::array,或结构体(或类)的 std::array。然而,初始化结构体或类的 std::array 往往会遇到……
std::array 类型的对象可以像任何其他对象一样传递给函数。这意味着如果我们按值传递 std::array,将进行昂贵的复制。因此,我们通常通过(const)引用传递 std::array 以避免此类复制。对于 std::array,元素类型……
在第 课中,我们讨论了标准库容器类使用无符号值表示长度和索引的不幸决定。因为 std::array 是一个标准库容器类,所以它也存在相同的问题。在本课中,我们将回顾索引和获取长度的方法……