- 博客(14)
- 收藏
- 关注
原创 Features of C++ 11
C++ 11,正式名称为 ISO/IEC 14882:2011,是 C++ 编程语言标准的一个重要版本,于 2011 年发布。它标志着该语言的重大修复,引入了各种功能和增强功能,提高了可用性、性能、以及 C++ 代码的安全性。在 C++ 11 之前,C++ 03 是标准,在巩固了该语言的同时,C++ 11 带来了现代编程概念,这些概念在随后的几年中塑造了 C++ 的发展。在本文中,我们将了解 C++ 11 中引入的关键功能和改进,包括语言增强、标准库添加和已弃用的功能。
2025-01-02 06:50:24
860
原创 Features of C++ 17
命名空间是组织和构建代码库的非常方便的工具,可以将逻辑上属于同一组的类和函数等组件放在一起。让我们考虑一个视频游戏引擎的假设代码库。这里,为整个游戏引擎定义了一个命名空间,因此该游戏引擎中实现的所有类和函数都将声明在这个公共命名空间下。为了进行更清晰的定义,您可以在全局命名空间下定义另一个命名空间,比如说 Graphics,它是一个子命名空间,现在将所有执行图形操作的类放在该命名空间下,依此类推。If。
2024-12-26 08:22:30
563
原创 Features of C++ 20
C++ 有着每 3 年以标准形式引入新的改进和功能的传统。随着最后一个标准于 2017 年发布为 C++ 17,C++20 将成为最新标准。
2024-12-23 06:45:24
874
原创 标准模板库 (STL) 并行算法。
标准模板库拥有 100 多种用于搜索、计数和操作范围及其元素的算法。在 C++17 中,69 个获得了新的重载,并且添加了新的重载。可以通过所谓的执行策略来调用重载的新算法。使用执行策略,您可以指定算法是否应顺序运行、并行运行或与矢量化并行运行。要使用执行策略,您必须包含标头 <execution>。
2024-12-20 12:19:11
562
原创 File System Library in C++17
在本文中,我们将通过示例了解 C++17 中的文件系统库。C++17 中添加了 <filesystem> 标头,并引入了一组简化文件系统操作的类、函数和类型。简而言之,我们可以说文件系统库提供了帮助我们简化文件和目录操作的工具。在早期版本中,执行文件和目录操作通常是一项繁重且容易出错的任务,因为它需要使用特定于平台的函数和库。添加文件系统库是为了解决这些问题,提供了一种可移植且标准化的方式来使用文件系统进行绘制。
2024-12-19 08:49:00
304
原创 C++17 std::optional
让我们采用一对两种类型 <YourType, bool> - 你可以用这样的组合做什么?在本文中,我将描述 std:Optional - C++17 中添加的新帮助器类型。它是您的类型的包装器和一个指示该值是否已初始化的标志。让我们看看它在哪里有用以及如何使用它。
2024-12-18 06:55:14
996
原创 复制省略 in C++
但是,如果我们仍然想确保编译器不会省略对复制构造函数的调用[禁用复制省略],我们可以使用 C++ 的“-fno-elide-constructors”选项来编译程序。如果使用“-fno-elide-constructors”选项,则调用第一个默认构造函数来创建临时对象,然后调用复制构造函数将临时对象复制到ob。简而言之,RVO 是一种技术,它为编译器提供了一些额外的能力来终止创建的临时对象,从而改变最终程序的可观察行为/特征。这也意味着可以创建更少的对象,因此您也不能依赖于调用的特定数量的析构函数。
2024-12-16 06:41:53
278
原创 Fold Expressions in C++ 17
C++17 中的折叠表达式是一项强大的功能,允许您通过二元运算符减少或“折叠”参数包。引入它们是为了简化在可变参数模板上运行的代码,并使其更加简洁和可读。op 是任意二元运算符,pack 是包含未扩展参数包的表达式,init 是不带未扩展参数包的表达式。
2024-12-13 07:10:44
405
1
原创 Structured binding in C++
结构化绑定是 C++17 的最新功能之一,它将指定的名称绑定到初始化程序的子对象或元素。简而言之,结构化绑定使我们能够声明从元组或结构初始化的多个变量。与引用一样,结构化绑定是现有对象的别名。与引用不同,结构化绑定的类型不必是引用类型。E 应是 std::tuple 的特化,或者是其非静态数据成员均可访问并在 E 的同一基类中声明的类型。结构化绑定声明以三种可能的方式之一执行绑定,具体取决于一。注意:标识符列表中标识符的数量必须等于数组中元素的数量。在本例中,E 是数组类型,因此名称绑定到数组元素。
2024-12-13 06:29:16
247
原创 C++ 17 新特性:if constexpr
在 C++17 中,引入了 if constexpr 功能以允许基于常量表达式的编译时分支。与在运行时计算的常规 if 语句不同,if constexpr 允许编译器丢弃不适用的代码分支。这意味着仅编译条件为真的代码分支,而在编译过程中丢弃其他代码分支。编译时断言:在程序编译过程中使用 if constexpr 检查条件,有助于用户及早识别错误并确保在编译时满足特定条件。算法优化:它有助于在编译时选择优化算法,从而优化性能,而无需任何运行时成本。编译时,不满足条件的代码分支在编译时被丢弃。
2024-12-12 07:15:26
305
原创 C++ 17 新特性 If Else and Switch Statements with initializers
由于这个变量已经被定义,如果我们稍后在程序中调用另一个函数(比如 bar()),我们需要创建另一个变量来存储从 bar() 返回的值第三,如果编译器可以明确知道该变量将仅在一个 if-else 块中使用,那么它可能能够更好地优化代码。首先有一个可选的初始语句,用于设置变量,然后是 if-else 块。条件变量的范围仅限于当前的 if-else 块。变量泄漏到周围的作用域中,这是无意的,必须小心确保该变量不会与其他变量混合。在许多情况下,我们需要检查函数返回的值并根据该值执行条件操作。
2024-12-12 06:36:07
117
原创 C++14 中的广义 Lambda 表达式
Lambda 表达式是在 C++11 中引入的。它们基本上是可以嵌套在其他函数甚至函数调用语句中的代码片段。通过将 lambda 表达式与 auto 关键字组合,这些表达式可以稍后在程序中使用。为了理解这个特性,我们举一个一般的例子。C++ 14允许我们在 lambda 表达式的输入参数中使用关键字 auto。因此,我们需要声明另一个仅适用于双精度值的 lambda 表达式。类似地,每次我们的输入参数类型发生变化时,lambda 函数都需要重写。然而,实际上,这需要将 lambda 包装在模板化函数中。
2024-12-09 07:46:11
898
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人