当前位置: 首页 > news >正文

wordpress网站 添加微信北京城乡住房建设厅网站

wordpress网站 添加微信,北京城乡住房建设厅网站,seo赚钱吗,长春个人做网站哪家好文章目录STD容器使用右值引用场景移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。移动语义只对右值有效,对左值无效原因STD容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…

文章目录

    • STD容器使用右值引用场景
      • 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。
        • 移动语义只对右值有效,对左值无效原因

STD容器使用右值引用场景

移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。

  1. 移动构造函数:容器在插入元素时,通常需要进行内存分配和对象构造操作。如果元素类型具有移动构造函数,容器就可以使用移动构造函数来构造元素,避免不必要的拷贝和销毁操作,提高程序的性能和效率。

例如,下面的代码中,使用了移动构造函数来构造 std::vector 容器中的元素:

#include <iostream>
#include <vector>
#include <string>int main() {std::vector<std::string> v;std::string s = "hello";v.push_back(std::move(s)); // 使用移动构造函数构造元素std::cout << s << std::endl; // 输出空字符串return 0;
}

在这个示例中,我们定义了一个 std::vector 容器和一个字符串对象 s,并使用 push_back 函数将 s 移动到容器中。由于使用了移动构造函数,s 的资源所有权被转移到容器中,s 变成了一个空字符串。

  1. 移动赋值运算符:容器在进行元素赋值时,通常需要进行对象销毁和对象构造操作。如果元素类型具有移动赋值运算符,容器就可以使用移动赋值运算符来赋值元素,避免不必要的拷贝和销毁操作,提高程序的性能和效率。

例如,下面的代码中,使用了移动赋值运算符来赋值 std::vector 容器中的元素:

#include <iostream>
#include <vector>
#include <string>int main() {std::vector<std::string> v;std::string s1 = "hello";std::string s2 = "world";v.push_back(s1);v[0] = std::move(s2); // 使用移动赋值运算符赋值元素std::cout << s2 << std::endl; // 输出空字符串return 0;
}

在这个示例中,我们定义了一个 std::vector 容器和两个字符串对象 s1s2,并使用 push_back 函数将 s1 插入到容器中。然后,我们使用移动赋值运算符将 s2 赋值给容器中的元素。由于使用了移动赋值运算符,s2 的资源所有权被转移到容器中,s2 变成了一个空字符串。

需要注意的是,移动语义只对右值有效,对左值无效。因此,在使用移动语义时,需要注意对象的值类别。

移动语义只对右值有效,对左值无效原因

移动语义的本质是将一个对象的资源所有权从一个对象转移到另一个对象,避免不必要的复制和销毁操作,提高程序的性能和效率。对于右值对象,由于其不再被使用,因此可以将其资源所有权转移到另一个对象,避免了不必要的拷贝和销毁操作。

而对于左值对象,由于其可能还会被使用,因此不能将其资源所有权转移到另一个对象,否则会导致程序出错。例如,如果将一个左值对象的资源所有权转移到另一个对象,那么原对象就不能再被使用,这可能会导致程序出现未定义行为。

实例:
当一个对象是左值时,它通常是一个具有名称的变量或对象,它在程序中可能还会被使用。例如:

std::string s1 = "hello";
std::string s2 = s1; // 拷贝构造函数,将 s1 的值拷贝给 s2

在这个示例中,s1 是一个左值对象,它是一个具有名称的字符串变量。当我们将 s1 的值赋给 s2 时,会调用拷贝构造函数,将 s1 的值拷贝给 s2,这是因为 s1 是一个左值对象,不能将其资源所有权转移到另一个对象。 若转移了所有权,

而当一个对象是右值时,它通常是一个临时对象或表达式的结果,它在程序中不再被使用。例如:

std::string s1 = "hello";
std::string s2 = std::move(s1);  // 移动构造函数,将 s1 的值转移到 s2

在这个示例中,s1 是一个右值对象,它是一个临时对象或表达式的结果。当我们将 s1 的值转移到 s2 时,会调用移动构造函数,将 s1 的值转移到 s2,这是因为 s1 是一个右值对象,可以将其资源所有权转移到另一个对象。由于 s1 不再被使用,因此可以将其资源所有权转移到 s2,避免了不必要的拷贝和销毁操作。

因此,移动语义只对右值对象有效,对左值对象无效。在使用移动语义时,需要注意对象的值类别,避免出现不必要的错误和问题。

http://www.yayakq.cn/news/476586/

相关文章:

  • 好看的网站后台界面西安网站优化推广方案
  • 南京专业网站制作多少钱做外贸怎么登陆外国网站
  • 青海wap网站建设哪家好公司做网站需要准备什么东西
  • 怎么查看网站公司WordPress软件连接不了网站
  • 有什么网站是layui做的成都品牌推广
  • python 做电商网站网络营销是做什么的
  • 各类企业网站案例网站搭建的流程是什么
  • 广汉网站建设ghxhwl传奇网页游戏大全
  • 装修的网站阿里云网站域名备案
  • 美康优选网站怎么做的网站开发需要做什么
  • 旅行社网站建设网站中的人力资源建设
  • 网站开发的高级阶段包括湖南seo优化公司
  • 群辉 wordpress 外网直通车关键词优化口诀
  • 阿里云做网站用哪个镜像单位网站建设建议对策
  • 虚拟空间网站ftp如何差异化同步安徽 网站制作
  • 网站名百度搜不到wordpress安装权限设置
  • 建设网站所采用的技术高新区建网站外包
  • 1000个免费货源网站入口好评的广告牌制作公司
  • 西安住房和城乡建设局网站怎么免费制作app
  • wordpress把站php+mysql网站开发全程实例 下载
  • 阿里巴巴建设网站福田企业的网站建设公司好吗
  • 夹江企业网站建设报价动易网站只能进首页
  • 企业门户网站建设机构百度竞价渠道代理
  • 企业建站方案网站开发建设协议
  • 如何维护公司网站网络规划设计师是干啥的
  • 高校校园网网站内容如何建设网站开发使用什么工具
  • 网站怎样改域名做网站大公司
  • 网站怎么被搜到首页云主机由哪些部件组成
  • 苏州制作网站的公司简介网站上漂亮的甘特图是怎么做的
  • 保健品 东莞网站建设wordpress设置弹窗