C++20
文章平均质量分 90
繁星意未平
记录我的计算机学习之路,分享计算机专业知识,领悟计算机实践之道。
展开
-
C++ Module详解,模块化编程终极指南
模块接口文件定义了模块所提供功能的接口。这些文件通常具有.cppm扩展名。模块接口以声明文件定义了某个名称的模块开始,这被称为模块声明。模块的名称可以是任何有效的 C++ 标识符。名称可以包含点,但不能以点开头或结尾,也不能连续包含多个点。有效名称的示例包括datamodel等。:目前,还没有为模块接口文件标准化的扩展名。然而,大多数编译器支持.cppm(C++ 模块)扩展名,这也是本书所使用的。请检查你的编译器文档,了解应使用哪种扩展名。原创 2023-12-24 18:43:27 · 1442 阅读 · 0 评论 -
C++函数模板详解,轻松实现通用函数
与类模板方法定义一样,函数模板的定义(不仅仅是原型)必须对使用它们的所有源文件可用。因此,如果多个源文件使用它们,您应该将定义放在模块接口文件中并导出它们。最后,函数模板的模板参数可以像类模板一样有默认值。注意:C++ 标准库提供了一个比这里展示的Find()函数模板更强大的函数模板。原创 2023-12-23 22:22:31 · 922 阅读 · 0 评论 -
C++类模板特化与继承使用说明书,新手也能get
你可以为特定类型提供类模板的替代实现。例如,你可能认为类型(C 风格字符串)的 Grid 行为没有意义。将在中存储其元素。拷贝构造函数和赋值运算符将执行这些指针类型的浅拷贝。对于,进行深拷贝字符串可能更有意义。最简单的解决方案是为编写一个专门的实现,将它们转换为 C++ 字符串,并存储在中。模板的替代实现称为模板特化。你可能会发现其语法初看有些奇怪。当你编写类模板特化时,你必须指定这是模板,并且你正在为特定类型编写模板的版本。以下是Grid的特化的语法。原创 2023-12-19 22:44:05 · 878 阅读 · 0 评论 -
掌握C++模板的艺术:类型参数、默认值和自动推导
您也可以编写自己的用户定义推导指南来帮助编译器。这些指南允许您编写模板参数如何被推导的规则。这是一个高级主题,所以不会详细讨论,但会给出一个示例来展示它们的强大功能。假设您有以下public:private:使用自动模板参数推导,您可以创建一个类型的" };然而,如果您将传递给构造函数,则类型T被推导为,这不是您想要的!您可以创建以下用户定义的推导指南,当向构造函数传递作为参数时,使其将T推导为这个指南必须在类定义之外但在与类相同的命名空间内定义。通用语法如下。explicit。原创 2023-12-13 19:08:38 · 974 阅读 · 0 评论 -
C++20 Advent of Code 可见树 Day 8: Treetop Tree House
要测量与给定树的观看距离,请从该树向上、向下、向左和向右看;如果你到达一个边缘或在第一棵树是相同的高度或高于正在考虑的树停止。(If如果树正好在边缘上,则它的观看距离中的至少一个将为零。满足于现有的树木覆盖量,精灵们只需要知道建造树屋的最佳地点:他们希望能看到很多。的-因为它们已经在边缘上,所以没有树阻挡视图。精灵不在乎远处的树比上面的规则所发现的树高;它在四个方向上的观看距离相乘来得到的。,可以保持干燥,这样他们就看不到比树屋更高的地方了。16棵树在边缘可见,另外5棵树在内部可见,总共。原创 2023-03-25 23:36:31 · 277 阅读 · 0 评论 -
C++ 20 新特性 ranges 精讲
C++20 中的ranges库使得使用 STL 更加舒适和强大。ranges库中的算法是惰性的,可以直接在容器上工作,并且可以很容易地组合。简而言之,ranges库的舒适性和强大性都源于它的函数思想。在深入细节之前,这里有一个ranges库的第一个示例:结合 transform 和 filter 函数。应该从左到右读取这个表达式。管道符号代表函数组合:首先,所有偶数才能通过。之后,每个剩余的数字都映射到它的两倍。这个小示例展示了ranges库的两个新功能:函数组合应用于整个容器。原创 2023-01-19 20:45:26 · 2907 阅读 · 0 评论