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

一屏网站模板下载 迅雷下载 迅雷下载地址百度提升优化

一屏网站模板下载 迅雷下载 迅雷下载地址,百度提升优化,wordpress密码漏洞,做商城网站可以个人备案左值:1.具有地址,存储在内存中2.可以出现在赋值符号的左侧3.可以取地址右值:1.通常没有地址,存储在寄存器或者临时内存中2.不能出现在赋值号的左侧3.不能取地址(除非绑定到const左值引用)int main() {int a…

左值:

1.具有地址,存储在内存中

2.可以出现在赋值符号的左侧

3.可以取地址

右值:

1.通常没有地址,存储在寄存器或者临时内存中

2.不能出现在赋值号的左侧

3.不能取地址(除非绑定到const左值引用)

int main()
{int a = 10;//变量是地址的别名int& b = a;//引用是变量的别名,引用是通过指针实现的return 0;
}

变量a实际上是某个地址的别名,我们假设这个地址是0x222224,其内容是10.

现在b是地址0x222230的别名,由于b是a的别名,则b地址的内容是a的地址,即0x222224.

这就是左值引用。

const int&& c = 20;//右值引用:右值的临时变量

20这个字面常量没有地址,于是会给它分配一个临时内存,这样就可以用一个指针指向这块临时内存。

右值引用:右值的临时变量。

std::move()的功能:把左值(引用)变为右值引用,继而可以通过右值引用使用该值,以用于移动语义。

即std::move等价于:

static_cast<T&&>(lvalue)
int main()
{int a = 10;//变量是地址的别名int& b = a;//引用是变量的别名,引用是通过指针实现的const int&& c = std::move(a);//std::move(a)现在是右值
}

c和b一样是指向a的指针。这个右值又称为亡值,或者将亡值。这样,让c在传递参数或赋值时可以触发移动构造,避免深拷贝。

std::move(a)只是告诉编译器a变成了右值,但不会修改a本身。

int main()
{vector<int>v1 = { 1,2,3,4,5 };vector<int>v2 = move(v1);cout << v1.size() << endl;//0cout << v2.size() << endl;//5return 0;
}

如果不使用move,即:

vector<int>v2=v1;

那么就是拷贝构造,深拷贝。如果v1的内容非常多,那么拷贝后会造成资源浪费。

move的作用就是让v2把v1的内容偷出来。这就是“移动”,避免了拷贝,节省了资源。

看一个例子:Array类

class Array
{
private:int size_;int* data_;public:Array(int size) :size_(size){data_ = new int[size_];}//深拷贝构造Array(const Array& temp_array){size_ = temp_array.size_;data_ = new int[size_];for (int i = 0; i < size_; i++){data_[i] = temp_array.data_[i];}}//深拷贝赋值Array& operator=(const Array& temp_array){delete[] data_;size_ = temp_array.size_;data_ = new int[size_];for (int i = 0; i < size_; i++){data_[i] = temp_array.data_[i];}}~Array(){delete[] data_;}
};

该类的拷贝构造函数,赋值运算符重载函数已经通过使用左值引用传参避免一次多余的拷贝。但是深拷贝无法避免。而右值引用的出现解决了这个问题。参数为左值引用意味着拷贝,为右值引用意味着移动。

Array(Array&& temp_array)
{data_ = temp_array.data_;size_ = temp_array.size_;temp_array.data_ = nullptr;
}

解释一下为什么要置空:

原因一:防止重复释放同一片内存。移动后新对象接管了temp_array.data_的内存空间,如果不置空,当temp_array析构时,会对其data_调用delete[],结果就是新对象和temp_array先后释放同一块内存,造成未定义行为。

原因二:移动后的源对象(temp_array)处于有效但未指定状态。将指针置空可以明确表示资源已经被转移

使用方法:

int main()
{Array a(10);Array b(move(a));
}

再来看一个实例:vector中的push_back()使用std::move提高性能

int main()
{string str1 = "VioletEvergarden";vector<string>vec;vec.push_back(str1);//传统方法,拷贝构造vec.push_back(move(str1));//调用移动语义的push_back方法,避免拷贝,str1失去原有值
}

http://www.dtcms.com/wzjs/451181.html

相关文章:

  • 做网站好的书做百度关键词排名的公司
  • asp+sql server典型网站建设案例手机百度云网页版登录
  • 电子商城网站制作公司免费下载app并安装
  • 毕节市建设网站店铺推广平台有哪些
  • 长沙建设局网站seo文章排名优化
  • 石家庄英文网站建设aso优化渠道
  • 跨境电商网站建设方案百度导航下载2022最新版官网
  • 开单独网站做a货鞋湖南百度推广代理商
  • 做电影下载网站需要什么软件好黑科技引流推广神器怎么下载
  • 做国内打不开的网站吗免费发外链的网站
  • 网站制作建设模板百度网站快速优化
  • wordpress网站测试网站推广一般多少钱
  • 珠海网站公司专业技能培训机构
  • 建筑行业做网站网络推广方法
  • 网站制作_做网站_耐思智慧郑州网络推广服务
  • 诚信建设万里行网站百度推广电话客服24小时
  • 东营市垦利区胜坨填建设站的网站推广员是做什么的
  • 天津网站建设代理商新闻发布会新闻通稿
  • 做水印的网站文件外链
  • 成都建站模板网站开发郑州seo排名哪有
  • 自己家里做网站网速慢网站推广如何做
  • 网站如何做推广百度图片查找
  • 时尚网站信息如何优化上百度首页公司
  • 中山本地网站建设推广企业广州疫情最新动态
  • 深圳电商网站设计公司百度投诉中心电话
  • 邯郸做移动网站费用bing搜索 国内版
  • 没有做老千的斗牛网站搜索引擎优化是免费的吗
  • 什么叫网站建设广州seo网络营销培训
  • b2c电子商务网站建设费用企业管理培训课程网课免费
  • 制作一个网站怎么做的哪家公司做推广优化好