C类++C++11语言C++14语言C++17C++20语言学习C++语法模板

什么是现代C++中的隐式移动构造函数?

什么是现代C语言中隐含定义的Move构造函数++

Move构造函数是C++中面向对象编程的一个重要特性,例如;复制赋值运算符构造函数、复制构造函数、移动赋值运算符、析构函数等。自C++11标准以来,在现代发展,move构造函数允许您将资源从一个对象移动到另一个对象,而无需复制它们。移动构造函数之一是隐式定义的Move构造函数它是在基类中定义或默认的,在本文中,我们将解释现代C++中什么是隐式定义的Move构造函数。

首先,让我们记住C++中的类和对象是什么。

现代C++中的类和对象是什么?

类是在C++中使用关键字定义的后跟类的名称。类是对象的蓝图。它们是用户定义的数据类型,我们可以在程序中使用,它们作为对象构造函数工作。对象是类的实例化。在C++编程中,大多数命令都与类和对象及其属性和方法相关联。下面是一个简单的类示例。

然后我们可以用这个来创建对象T型的类型我的班级如下所示。

现在,让我们看看什么是move构造函数,

什么是现代C++中的移动构造函数?

移动构造函数是一个构造函数,允许您将资源从一个对象移动到另一个对象,而无需复制它们。换句话说,移动构造函数允许您从维瓦卢对象转换为左值对象。

move构造函数用于将一个对象的数据移动到新对象,它有效地生成一个指向旧对象成员的新指针,并将资源传输到堆内存。移动成员时,如果数据成员是指针,则还应将旧对象成员的值设置为NULL值。使用移动构造函数时,不会在内存中使用不必要的数据复制。这样可以更快地创建对象。大多数情况下,如果你的类/对象有一个移动构造函数,你可以使用C++其他功能的其他移动方法,例如,标准::矢量,std::数组,标准::映射例如,可以使用类类型创建向量,然后可以使用推送(_back)运行move构造函数的方法。

下面是C++中move构造函数最常用的语法(自C++11以来)。

此通用语法也是“移动构造函数的典型声明”的语法,如下所示。

在现代C++中,什么是隐式定义的移动构造函数?

The 隐式定义的Move构造函数是一个由另一个基隐式定义的移动构造函数,或者是一个既不删除也不重要的隐式声明的移动构造函数。

  • 定义了隐式定义的Move构造函数,这意味着它具有由编译器隐式生成和编译的带有{}的函数体。
  • 如果是类或结构类型,则隐式定义的移动构造函数对其成员执行完全移动操作。
  • 隐式定义的移动构造函数复制对象表示(如std::memmove中所示)(如果它是联合类型)。

根据这篇论文作者:Bjarne Stroustrup,

  • 默认情况下,如果每个元素都有一个移动构造函数,那么元素的聚合就有一个隐式定义的移动构造函数。
  • 如果元素集合的任何元素都具有显式的移动构造函数,则隐式定义的元素集合的移动构造函数是显式的。类似地,对于复制构造函数

除此之外,

  • 从C++11到C++20,如果隐式定义的移动构造函数满足constexpr构造函数的要求,那么它就是constexp构造函数。
  • 自C++23以来,如果隐式定义的移动构造函数满足构造函数函数的要求,那么它就是constexpr。

现代C++中是否有一个隐式定义的移动构造函数的简单示例?

在现代C++示例中,这个简单的类示例默认使用move构造函数。

如下所示。

我们可以定义自己的移动构造函数,如下所示:

并且,我们可以使用这个Tx类作为基类来定义一个新的泰伊分类如下。

正如你所见,这个新的泰伊上面的类具有来自的隐式定义的移动构造函数Tx(发送)类。因为它是隐式定义的,不是删除的,也不是琐碎的。

现代C++中有隐式定义的move构造函数的完整示例吗?

下面是一个使用基类中隐式定义的移动构造函数的完整示例。

下面是另一个带有模板类的隐式定义的move构造函数的完整示例。

如果您需要有关移动构造函数的更多技术细节,请参阅本出版物中的Bjarne Stroustrup和Lawrence Crowlcan;https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html

现代C++C++Builder徽标中隐含定义的Move构造函数是什么

C++编译器是在Windows、MacOS、iOS和Android操作系统上构建简单或专业应用程序的最简单、最快的C和C++IDE。对于初学者来说,它也很容易学习,它有广泛的示例、教程、帮助文件和对代码的LSP支持。RAD Studio的C++Builder版本附带用于高性能本机Windows应用程序的屡获殊荣的VCL框架,以及用于跨平台UI的强大FireMonkey(FMX)框架。

有一个免费的C++Builder社区版,面向学生、初学者和初创公司;可以从以下网址下载在这里。对于专业开发人员,有professional、Architect或Enterprise版本。

哦,你好👋
很高兴见到你。

注册后,每天都可以在收件箱中接收很棒的C++内容。

我们不发垃圾邮件!阅读我们的隐私政策了解更多信息。


使用RAD Studio、Delphi或C++Builder缩短开发时间并更快地推向市场。
设计。代码。编译。部署。
开始免费试用

免费C++Builder社区版

关于作者

Yilmaz Yoru博士有35年以上的编码经验,使用了30多种编程语言,主要是Windows、Android、Mac-OS、iOS、Linux和其他一些操作系统上的C++。他毕业于Eskisehir Osmangazi大学机械工程系,并获得硕士和博士学位。他是ESENJA LLC公司的创始人兼首席执行官。他的兴趣是编程、热力学、流体力学、人工智能、2D和3D设计以及高端创新。
相关职位
C类++C++11语言C++14语言C++17C++20C简介++学习C++

学习C++类中的复制构造函数

C类++C++11语言C++14语言C++17C简介++学习C++语法

了解如何在C++中使用析构函数类型?

C类++C++11语言C++14语言学习C++语法

如何在C中将u32string转换为wstring++

C类++C++11语言C++14语言C++17C++20语言C简介++学习C++

如何学习现代C++中的Move构造函数?