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

简述网站建设的一般步骤久久建筑网怎么免费下载

简述网站建设的一般步骤,久久建筑网怎么免费下载,网页美工设计的工作流程?,重庆市建设工程信息网官网安全监督渝快办文章目录 概述左值右值右值引用左值和右值的互换 小结 概述 左值和右值属于2中不同的表达式类型;它们在表达式中扮演不同的角色,特别是在赋值操作和函数参数传递中。 左值 定义:左值是指那些在内存中有确定位置的表达式,可以出…

文章目录

  • 概述
    • 左值
    • 右值
    • 右值引用
    • 左值和右值的互换
  • 小结

概述

左值和右值属于2中不同的表达式类型;它们在表达式中扮演不同的角色,特别是在赋值操作和函数参数传递中。

左值

定义:左值是指那些在内存中有确定位置的表达式,可以出现在赋值表达式的左侧,即可以被赋值。
特征:
左值可以出现在赋值操作的左侧,也可以出现在函数的参数中(如果函数参数是引用类型)。

关键点:表达式左边,可以被赋值可以推导出来;函数参数+参数是引用类型

右值

==定义:右值是指那些没有存储在内存中,或者没有持久存储位置的表达式。==它们通常表示临时值或字面量。
特征:右值通常不能出现在赋值操作的左侧,但C++11引入了右值引用(rvalue reference),允许右值出现在赋值操作的左侧,并且可以用于实现移动语义(move semantics)。

关键点:右值一般在表达式右边。

右值引用

定义:C++11引入了右值引用,用双写的&&表示,它允许程序员更有效地处理右值。
用途:

  1. 移动语义:允许临时对象的资源被“移动”到另一个对象中,而不是进行复制。一般用std::move来实现
  2. 完美转发:在模板编程中,可以转发参数的值类别(左值或右值)。 这个一般用std::forward来实现

示例1(移动语义):

#include <iostream>
#include <vector>class ResourceHolder {
public:ResourceHolder(int size) : data(new int[size]) {std::cout << "ResourceHolder created with size " << size << std::endl;}~ResourceHolder() {std::cout << "ResourceHolder destroyed" << std::endl;delete[] data;}// Move constructorResourceHolder(ResourceHolder&& other) {data = other.data;other.data = nullptr;}// Copy constructor (deleted)ResourceHolder(const ResourceHolder&) = delete;// Move assignment operatorResourceHolder& operator=(ResourceHolder&& other) {if (this != &other) {delete[] data;data = other.data;other.data = nullptr;}return *this;}// Copy assignment operator (deleted)ResourceHolder& operator=(const ResourceHolder&) = delete;private:int* data;
};int main() {ResourceHolder largeResource(1024);std::vector<ResourceHolder> resources;// 使用 std::move 将 largeResource 移动到 vector 中resources.push_back(std::move(largeResource));// largeResource 现在是一个空的 ResourceHolder 对象return 0;
}

示例1(完美转发):

#include <utility>
#include <iostream>// 假设这是我们要转发参数的目标函数
void process(int& i) {std::cout << "process(int&) called with " << i << std::endl;
}void process(int&& i) {std::cout << "process(int&&) called with " << i << std::endl;
}// 模板函数,使用 std::forward 来转发参数
template<typename T>
void wrapper(T&& arg) {process(std::forward<T>(arg));
}int main() {int a = 5;wrapper(a);  // a 是左值,调用 process(int& i)wrapper(10); // 10 是右值,调用 process(int&& i)
}

左值和右值的互换

常量左值:通过const关键字可以创建一个常量左值,它不能被赋值。
右值转换为左值:通过赋值操作,右值可以转换为左值。例如,int &&a = 10; 这里的10是一个右值,但通过赋值操作,a成为了一个左值引用。

小结

本篇主要写了一个新的概念,右值引用;左值右值是一直存在的,只不过引入了一个右值引用,然后多了一个左值转成右值(一般用std::move),还多了一个完美转发(一般用std::forward)。例子仅供参考,理解概念使用。还是先把概念搞明白,然后才好理解;感兴趣可以一起学习学习。概念这东西,很多人都不喜欢,却都逃不掉,多看几遍就好了。OK,翻篇。

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

相关文章:

  • 有哪些网站能够免费找到素材河池网络推广
  • 做网店装修的网站有哪些织梦网站移动化
  • 开发网站需要哪些技术wordpress用什么系统
  • 长春电商网站建设公司想买个服务器做网站
  • 无极网站建设质量推广引流哪个软件最好
  • 资溪县建设局网站临沂网站备案公司
  • 江苏省建设厅官网网站首页襄阳文明建设投诉网站
  • 网站合作推广方案公司注册域名需要哪些条件
  • 创建个网站需要多少钱珠海企业网站建设公
  • 建设部资质网站查询广州建设总承包集团
  • 专业做网站哪家好wordpress 8.0
  • 开发网站需要什么北京网站建设专业公司
  • 大一网站开发体会转运公司网站制作
  • 惠东网站设计有哪些好的印花图案设计网站
  • 做卡盟网站赚钱吗wordpress标题不能空
  • 网站服务商怎样在在农行网站上做风险评估
  • 做网站和做新媒体运营杭州百度优化
  • 个人订阅号支持微网站的建设吗网站免费发布与推广
  • 聊城专业网站建设公司平面设计必学软件
  • dephi 网站开发购买国外服务器
  • 建设网站要什么资料wordpress 导航栏 排序
  • 办网站需要多少费用电商网页精品欣赏网站
  • 邱县手机网站建设网站开发软件手机版
  • 零基础一个人做网站网站开发与维护视频
  • 快速搭建网站后台哈尔滨手机网页制作
  • 重庆市工程建设信息网新网站商务网站建设与运营
  • 深圳市建设执业培训中心网站高端旅游网站建设
  • 网站开发技术三大件专业的企业管理软件
  • 乐清网站艰涩百度域名登录
  • 有哪些育儿类网站做的比较好关键词全网搜索