C++ Deducing_this 函数2025年03月24日 | 阅读 5 分钟 在本文中,我们将讨论C++中的推导_this函数。C++中的推导_this特性是C++20中引入的一个高级概念。它允许更灵活和清晰的代码,尤其是在考虑lambda函数和成员方法时。下面是推导_this的一些特性,包括它是什么、其语法以及如何实际实现。 什么是推导_this?在C++中,this指针是非静态成员函数的一个隐式参数,它指向其类的实例。直到C++20,this始终是指向类类型的指针。有了这样的特性,它就可以被推导为表示类类型的引用,在某些上下文中可以使用稍微简化的语法,从而提高可用性。 为什么要使用推导_this?
示例1:Lambda函数输出 The Value is: 100 说明在此示例中,lambda类型类使用了C++中的推导_this特性。在这里,我们创建了一个名为MyClass的类,它有一个公共成员变量val,类型为整数,通过构造函数初始化。成员函数processValue提供了一个lambda,它捕获this指针以直接引用实例变量。当调用此lambda时,它会将val的值打印到控制台。在主函数中,创建了一个MyClass对象,val的值为100,并调用processValue来调用lambda,后者打印“The Value as 100”。上面显示的这个示例只是为了说明推导_this确实导致了更少“可写和可读的代码,因为我们可以直接访问成员变量。 示例 2输出 Value: 100 Value: 101 说明以下是C++代码片段,它显示了此特性可与类的成员函数一起使用。它定义了一个名为MyClass的类,该类具有一个整数公共成员变量value和一个设置其(构造函数)值的构造函数。成员函数OutputValue使用lambda捕获this并允许访问val的值。在此示例中,add方法将val加一,val指的是该类的一个对象。主函数实例化一个MyClass对象以获取val=100。如果调用OutputValue,它将打印“Value:100”。在单次调用加法和另一次调用OutputValue以检查运行时值后,它会打印更新后的值。此示例指的是带有lambda和成员函数直接访问变量的代码。 推导_this的优点此函数有几个优点,如下所示
推导_this的缺点此函数有几个缺点,如下所示
结论总而言之,C++20还带来了推导_this特性,通过允许将this指针推导为引用,提高了代码的灵活性和可读性,主要在lambda内部以及成员函数中提供了更好的语法。它在泛型编程和模板上下文中很有益,因为它减少了样板代码,改进了类型推断并保留了const正确性。但是,它可能会增加一些复杂性,尤其是在嵌套或模板场景中,对于不熟悉该特性的开发人员来说会很复杂。这是一个很好的特性,特别是对于更大的C++20代码库,但它在更简单的应用程序中可能更易于访问,并会给不支持C++20的旧编译器带来问题。 |
简介:Count-Min Sketch 是一种概率数据结构,用于对大型数据流中的近似计数查询。它使用有限的内存空间高效地估计数据流中元素的频率。本质上,Count-Min Sketch 由一个二维计数器数组组成。哈希……
阅读 4 分钟
在本文中,我们将讨论C++中的纳拉亚纳数及其公式、属性、伪代码和示例。C++中的纳拉亚纳数是什么?纳拉亚纳数是一个组合序列,它应用于数学的许多其他领域,它们的名字来源于印度人...
5 分钟阅读
简介:在 C++ 中,std::ranges::out_value_result 函数是 C++20 中新的 Ranges 库函数之一,用于进一步增强标准模板库 (STL) 的功能,以提供一种更具表达力和类型安全的方式来处理范围和算法。它的目的是...
阅读 6 分钟
介绍 对称素数是一种特殊的素数,即使经过对称变换(通常以数字时钟的外观形式进行旋转和反射)后仍然是素数。数字 11、13 和 17 是一个...
阅读 4 分钟
在本文中,我们将讨论它们各自的、示例、时间复杂度以及空间复杂度。双基回文数:一个向前和向后读都相同的字符或数字序列称为回文数。例如,在十进制中,数字 121 是一个……
5 分钟阅读
20 是 C++ 标准库的另一个强大扩展,以及如何转换和处理范围的改进。它是 Ranges 库的一部分,Ranges 库是一种新的方法,它专注于以最优雅和最富有表现力的方式操作元素序列。
阅读 4 分钟
在本文中,我们将通过示例讨论。std::memory_order 函数指定了应围绕原子操作排列的内存访问(包括常规内存访问和非原子内存访问)的顺序。当多个线程同时读写多个变量时,……
阅读 4 分钟
引言 模板和泛型为我们提供了编写灵活且可重用代码的强大能力。然而,当涉及到处理类型时,这些技术可能会变得相当复杂。最常见的问题之一与引用作为变量有关。当面临这种情况时...
7 分钟阅读
神秘数字游戏简介 神秘数字游戏是一个简单有趣的编程项目,玩家需要在一定范围内猜测随机选取的数字。在此游戏中,程序会向玩家提供反馈,例如……
18 分钟阅读
在编程中,数组是一种数据结构,它包含相同数据类型元素的集合。这些项存储在连续的内存位置中,这意味着它们按顺序存储在内存中。数组通常用于处理一组可比的……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India