资深开发者需精通的10个C++高级主题

资深开发者需精通的10个C++高级主题_第1张图片

C++ 正在快速向前发展,所以想要紧跟其脚步并不是一件容易的事。我们在之前的文章中讨论过这个问题,讨论了 C++ 的演变以及如何实现遗留 C++ 代码现代化。在这篇文章中,我们将重点介绍经验丰富的 C++ 开发人员可以跟上的高级主题列表。该列表并不详尽,而且有点主观(我们可能已经放弃了一些您认为实际上非常重要的项目,或者一些您认为对您来说不那么重要的项目)。尽管我们的目标是列出高级 C++ 主题,对一些人来说可能是高级主题,但对其他人来说可能只是基础主题。此外,新的 C++ 特性也有不同级别的复杂性。有些适用于所有人,有些适用于图书馆和基础设施维护人员。我们将尝试涵盖我们认为相关的内容,而不限于特定的 C++ 用法。在我们开始之前的最后一个注意事项:高级 C++ 内容并不一定意味着新的 C++ 特性。对于有些应当给予适当关注并且从 C++98 开始我们就一直关注的高级 C++ 主题,我们也会在列表中列出其中一部分。

需要注意的是,这篇文章并不是教程,它的目的不是教东西,而是指出您应该放入所需的 C++ 技能列表并添加到您的 C++ 学习路径中的相关高级 C++ 主题。

接下来我们就开始了。

模板

模板是 C++ 提供的最强大的工具之一,但在某些情况下,它们并没有得到应有的利用。有些公司将模板认为是基础设施团队的工具,而“常规”C++ 团队只是在使用它们。我认为,任何团队的高级 C++ 开发人员都应该能够在任何相关的地方实现模板,以实现代码重用、获取更高效的代码和更好的 API。

您不必了解模板的所有细节(除非您确实编写了通用模板库),但您应该从掌握简单模板函数和模板类的细节开始,然后是类型和非类型模板参数的规则(您可以将模板参数先放在一边,至少在开始时)。

C++11 增加了可变参数模板,您还应该知道如何根据需要使用这些模板。请记住,诸如 emplace、make_tuple、make_unique 和 make_shared 之类的函数全部都依赖于可变参数模板,您可能需要使用可变参数模板自己实现类似的工厂方法,这并不是理论上的。

您还可以使用模板特化,这是一种可以追溯到 C++98 的技术。无论是完全特化还是部分特化,您都会发现这种技术对于特定类型或类型族实现更有效的算法来说很有用。

另一种旧的(同样基于 C++98)但是同样有用的模板技术是标签调度。本文中也介绍了如何使用 C++20 概念来代替标签调度。此外,C++17 if-constexpr 有时可以成为标签调度的相关替代品。

C++17 增加了类模板参数推导 (CTAD),它可以更轻松地将模板类对象实例化,而无需提供模板参数,例如:

std::vector v1{
   1, 2, 3}; // std::vector
std::tuple p1{
   1, "wahad", "one"s}; //std::tuple

静态多态性这一术语也很重要。当您在编译时知道某些代码是否应该使用 TCPConnection 或 UDPConnection 时,与基于虚拟函数的动态多态性相比,正确使用模板来管理不同的实现将获得更好的运行时性能。

为了总结我们的模板技术列表,我们添加了 CRTP,它经常被用作静态多态性背后的工具,但不是唯一的工具(有关在基类中实现克隆方法,请参见本例)。

你可能感兴趣的:(C++,c++)