C++ 中的显式默认和删除的函数2025年5月24日 | 阅读 7 分钟 随着 C++11 标准的发布,C++ 中引入了C++ 的显式默认和删除函数,以赋予开发人员对特定成员函数的创建和应用更大的控制权。这些特性允许显式指定默认行为或禁止特定操作,从而增强了代码的清晰性、安全性和可维护性。C++ 中有几种显式默认和删除的函数。其中一些函数如下: 1. 显式默认函数 (= default)a) 成员的默认函数是如果程序员没有显式声明成员函数,C++ 会自动为它们创建默认实现。这包括移动构造函数、移动赋值运算符、复制构造函数、默认构造函数和复制构造函数。 b) ‘= default’ 语法使用 = default 语法,开发人员可以要求编译器从 C++11 开始提供成员函数的默认实现。 c) 用例当编译器提供的默认行为合适时。 通过显式声明期望默认行为来提高代码的可读性。 d) 语法示例让我们通过一个例子来说明 C++ 中的显式默认函数 (= default)。 输出 Custom function called. 说明1. 包含头文件 为了使用 std::cout 将消息打印到控制台,必须在此行包含标准输入/输出流头文件。 2. 类定义 MyClass 类包含显式默认的特殊成员函数:析构函数、复制赋值运算符、移动赋值运算符、默认构造函数、复制构造函数和移动构造函数。 调用自定义成员函数 customFunction 时,会打印一条消息。 3. Main() 函数 在 main 方法中创建了三个 MyClass 类型的对象,例如 obj1、obj2 和 obj3。
此代码演示了显式默认的特殊成员函数的用法,以及 MyClass 类型对象的创建、复制和移动。它还展示了类对象如何调用自定义成员函数。 2. 删除的函数a) 防止函数使用在某些情况下,限制特定功能的使用,包括对象复制和移动,可能是更可取的。 b) ‘= delete’ 语法通过引入 C++11 中的 = delete 语法,程序员可以直接删除一个成员函数,使其无法访问。如果尝试使用已删除的函数,则会产生编译错误。 c) 用例存在某些情况下类不应使用特定函数(例如,使类无法移动或复制)。 它用于防止意外使用并强制执行特定行为。 d) 语法示例让我们通过一个例子来说明 C++ 中的删除函数。 输出 Default constructor called. Custom function called. 说明1. 包含头文件 为了使用 std::cout 将消息打印到控制台,必须在此行包含标准输入/输出流头文件。 2. 类定义 复制构造函数和复制赋值运算符是 NoCopyClass 类的两个已删除成员函数,而默认构造函数是 customFunction。 一旦类的实例被构造,默认构造函数就会输出一条消息。 如果使用复制构造函数和复制赋值运算符,将会出现编译错误,因为它们被显式删除了 (= delete)。 3. Main() 函数 此函数创建一个名为 obj1 的 NoCopyClass 类型对象,调用默认构造函数,并输出一条消息。
总之,此代码定义了一个名为 NoCopyClass 的类,该类的复制构造函数和复制赋值运算符已被删除,以防止对象被复制。它提供了一个示例,说明已删除的函数如何管理类的行为并识别潜在的编译问题。 C++ 中显式默认和删除的函数的优点C++ 中显式默认和删除的函数具有以下几项优点: 1. 意图和清晰度默认函数:当使用 = default 显式声明函数的默认值时,代码更易于访问。它传达了该函数有意使用编译器生成的默认行为的意图。 删除的函数:使用 = delete 表明某些操作被有意禁止。它通过明确说明使用某些函数的限制来提高代码的可读性。 2. 防止意外操作默认函数:当默认操作应被执行时,确保它们被执行。例如,设置为默认的复制构造函数表明该类是可复制的,并且默认实现是合适的。 删除的函数:禁止某些操作,从而防止意外或不安全的行为。例如,通过删除复制构造函数和复制赋值运算符可以避免意外的对象复制。 3. 防止资源泄露删除的函数:在资源管理至关重要(例如,管理动态生成的内存)时,显式取消复制操作可以避免意外的资源共享和潜在的内存泄露。 4. 编译器生成的代码默认函数:依赖编译器生成的代码可以实现更优化和高效的实现。当使用默认函数时,编译器保证会为给定类生成合适的代码。 删除的函数:显式禁用特定操作可以防止为这些函数生成默认代码,从而降低了意外行为的可能性。 5. 强制执行设计约束删除的函数:它通过阻止可能违反类不变量或类的预期用途的特定操作来帮助强制执行设计约束。 6. 维护和可演化性默认函数:当函数的默认行为足够时,可以简化代码维护。类将来的更改不需要手动更新这些函数。 删除的函数:显式声明对某些操作的限制有助于防止意外使用,从而更容易随着时间的推移维护和演化代码。 7. 文档和代码审查默认函数:关于某些函数的预期行为的文档,有助于代码审查和开发人员之间的协作。 删除的函数:清晰地记录约束和限制,使开发人员更容易理解类的预期用途和局限性。 8. 更安全的代码删除的函数:它防止可能导致资源泄露、运行时错误或未定义行为的某些活动。这有助于编写更安全的代码。 9. 所有权和语义删除的函数:防止资源的意外共享或数据共享,强制执行所有权语义。为了保证独占所有权,一个管理唯一资源但可以删除复制操作的类。 通过指示特定成员函数的预期行为并防止意外操作,C++ 中的显式默认和删除的函数有助于编写更具表现力、更安全、更易于维护的代码。它们还为强制执行设计约束和传达程序中类的预期用途提供了强大的工具集。 |
在本文中,我们将探讨一些孪生素数对,并构建一个可以生成这种独特对的算法。将提供 C++ 示例来演示查找和打印孪生素数对的有效方法。孪生素数和素数概念素数...
阅读 4 分钟
本文将讨论其语法和示例。引言 C++ 中的异常提供了一种健壮的方式供程序处理错误和非正常情况。但是,当异常嵌套时,传播正确的异常信息有时可能很困难。std::rethrow_if_nested 在...中引入...
阅读 6 分钟
中心七边形数是一种中心多边形数,它具有七边形形状和一个中心点。规则七边形数通过添加层来形成七边形,但中心七边形数对称地从单个点向外生长...
阅读 8 分钟
在 C++ 中,您可以通过迭代整数、检查它们是否满足 Dudeney 条件,然后输出满足条件的整数来编写一个程序来查找 Dudeney 数字。这涉及将数字分解为其各位数字,计算其幂的和,然后进行比较……
阅读 6 分钟
异字母词(Heterogram)是一个单词、短语或句子,其中每个字母最多使用一次。这是语言学部分的一个好概念,在计算语言学领域和猜谜游戏中将会有很好的应用...
5 分钟阅读
在本文中,我们将讨论 C++ 中模板和多态之间的区别。在讨论它们之间的区别之前,我们必须了解 C++ 中的模板和多态及其特性。C++ 中的模板是什么?在 C++ 中,有生成模板的能力,它允许类...
阅读 4 分钟
在本文中,我们将讨论 C++ 中的二维网格移位及其示例。引言:在 C++ 中,移动二维网格意味着将其每个组件沿预定方向(垂直或水平)移动。许多计算任务,包括图像处理、矩阵操作和基于网格的算法,经常...
5 分钟阅读
简介:Delaunay 三角剖分是计算几何学中的基石概念。它广泛应用于计算机图形学、网格划分、地形建模等领域。它以 Boris Delaunay 的名字命名,他于 1934 年首次描述了它。之后,由于其效率和...
阅读 12 分钟
数组操作任务对于计算机科学至关重要,尤其是在算法问题解决领域。数组使用其索引进行排列,是存储在连续内存位置中的元素组。在我们必须以不同方式操作数组的情况下,例如通过搜索、排序或...
阅读 6 分钟
C++ 经历了许多变化并添加了更多功能,这些功能反过来使该语言更加灵活。这是近年来最显著的改进之一;范围是 C++20 的全新功能。范围是一种更符合逻辑的...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India