C++ Constexpr28 Aug 2024 | 5 分钟阅读 在 C++ 11 中,引入了一个名为 constexpr 的特性。其基本概念是通过在编译时而非运行时执行计算来提高软件性能。值得注意的是,消费者通常在开发人员完成编译和最终确定软件后多次运行它。目标是投入编译时间,同时节省运行时时间(类似于模板元编程)。Constexpr 表示对象或函数的值可以在编译时确定,并且该表达式可以用于其他常量表达式。 输出 200 ......... Process executed in 1.11 seconds Press any key to continue. const 限定符让程序员和编译器知道我们打算让变量是只读的,并且任何修改它的尝试都会导致编译错误。 在指示常量方面,constexpr 等同于 const。它也是不可变的。Const 的不同之处在于,根据我们初始化它的方式,它可以在编译时和运行时进行评估。 说明
编写一个只返回给定整数乘积的 constexpr 函数可能看起来毫无意义。除了性能提升之外,这个特性的用途还可以在哪里找到?
输出 6 …….. Process executed in 1.11 seconds Press any key to continue. 将设备从一个系统转换到另一个系统是另一个实际用例。例如,尽管大多数人觉得使用角度以度为单位更简单,但 C/C++ 中的三角函数接受以弧度为单位的角度。因此,我们可以将 ConvertDegreeToRadian() 方法定义为 constexpr,而不会牺牲代码的清晰性或效率。 输出 Angle in radian: 1.5708 …………………………………. Process executed in 0.11 seconds Press any key to continue. Constexpr 与内联函数
Constexpr 性能提升示例// 一个演示 constexpr 用法的 C++ 程序 输出 832040 …………. Process executed in 0.003 seconds Press any key to continue. 如果我们从下面一行中删除 const,那么 fib(5) 的值不会在编译时进行评估,因为 constexpr 的结果没有在 const 表达式中使用。上述程序在 GCC 上运行时间为 0.003 秒(我们可以使用 time 命令测量时间)。 在进行上述修改后,程序的执行时间增加了 0.017 秒。 构造函数和 constexpr: 用 constexpr 说明符声明的构造函数被认为是 constexpr 构造函数。构造函数和对象也可以使用 constexpr 创建。constexpr 的构造函数被隐式地内联。 constexpr 用法的构造函数限制
输出 200 …….. Process executed in 0.17 seconds Press any key to continue. Constexpr 与 const它们具有不同的功能。Const 用于几乎不变的事物,如 Pi 的值,而 constexpr 主要用于效率。成员方法可以使用其中任何一个。为了防止对函数进行意外修改,成员方法被转换为 const。相反,constexpr 的目的是在构建时计算表达式,从而在执行代码时节省时间。Constexpr 可以与成员和非成员函数一起使用,包括构造函数,而 const 只能与非静态成员函数一起使用。然而,有一个要求是参数和返回类型必须是字面量类型。 |
在本文中,您将了解 C++ 中的 std::stoll 函数及其语法和示例。std::stoll() 是什么?C++ 标准模板库 (STL) 包含 std::stoll() 函数,该函数专门用于将字符串转换为长整型数字。在处理...时非常有用。
阅读 4 分钟
假设我们有两个非负数 x 和 y,以及两个值 l 和 r。我们必须确定在这两个给定数字的 l 到 r 的范围内,所有位是否互为补码。我们将学习如何...
阅读 2 分钟
滑动窗口技术是一种计算方法,旨在用单次循环替换嵌套循环,从而降低时间复杂度。滑动窗口技术 让我们通过一个类比来帮助理解这种策略。考虑一个固定长度为 n 的窗口...
阅读 3 分钟
什么是字符串字面量?匿名字符串[1]或字符串字面量是计算机程序源代码中字符串值的字面量。例如 x = "foo",其中 "foo" 是值为 foo 的字符串字面量,现代计算机语言经常使用带引号的系列...
阅读 3 分钟
每当在 C++ 语言编写的程序中定义函数时。如果我们想调用该函数,可以通过两种方式实现:按值调用 按引用调用 在讨论按引用调用方法之前,我们将了解两种调用方式……
阅读 4 分钟
在本文中,我们将讨论 C++ 中 std::wstring 和 std::string 之间的区别。但在讨论它们的区别之前,我们必须了解 std::wstring 和 std::string 及其示例。C++ 中 std:wstring 的介绍 std::wstring 是 C++ 标准模板库 (STL) 之一……
5 分钟阅读
Reinterpret_cast 是 C++ 中一种强大且有问题的转换运算符,用于类型转换。即使它们不相关或不兼容,它也能让你将一种类型的指针转换为另一种类型的指针。因为这可能导致……
阅读 6 分钟
在本文中,您将学习如何在 C++ 中从单向链表中选择一个随机节点。如果您想从单向链表中选择一个随机节点,您可以遵循以下步骤:定义节点结构:首先在...中建立节点的结构。
阅读 2 分钟
在本文中,您将了解仿函数与函数之间的区别。但在讨论它们的区别之前,您必须了解 C++ 中的仿函数和函数。C++ 中的仿函数是什么?仿函数有时被称为“函数对象”。它是一个对象……
阅读 6 分钟
在 C++ 中,仿函数(functor)是一个函数对象——重载了函数调用运算符 () 的类的实例。仿函数用于提供一种面向对象的方式来处理函数或类函数对象。仿函数可以在许多函数是…的地方使用。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India