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

自搭建网站品牌建设存在问题

自搭建网站,品牌建设存在问题,企业网盘哪个最好用,个人主页设计孙悟空示例C 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例一、左值右值1.左值2.右值二、左值引用右值引用1.左值引用2.右值引用总结三、integral_constant四、integral_constant的元模板使用案例1.求最大整数2.内存对齐alignof关键字元模板计算内存…

C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例

  • 一、左值右值
    • 1.左值
    • 2.右值
  • 二、左值引用右值引用
    • 1.左值引用
    • 2.右值引用
    • 总结
  • 三、integral_constant
  • 四、integral_constant的元模板使用案例
    • 1.求最大整数
    • 2.内存对齐
      • alignof关键字
      • 元模板计算内存对齐


一、左值右值

1.左值

​​含义​​:

  • 代表一个有明确、持久内存位置的​​对象​​。可以理解为能取地址 (&) 的对象。

特点:

  • 有独立的内存地址(可以对其使用取地址运算符 &)。
  • 在程序的多个地方可以使用(即“有名字”,或者可以通过指针/引用持久访问)。
  • 通常出现在赋值表达式的 ​​左边或右边​​。
  • 生命周期超出其所在的单个表达式。

例子:

int main() {int x = 10;      // x是左值 (有地址的存储单元)int arr[5];      // arr是左值int* ptr = &x;   // 对左值取地址有效// 错误用法:// &10;          // 错误!10是右值(字面量没有地址)
}

2.右值

含义​​:

  • 代表一个​​临时的、即将消亡的值​​。通常没有明确的、可由程序通过变量名或指针直接访问的内存地址(或者这种访问没有意义)。可以理解为“只能出现在赋值表达式​​右边​​”的值。

特点:

  • 通常是 ​​临时对象​​ 或 ​​纯常量值​​。
  • ​​不能​​对其使用取地址运算符 &(尝试这样做编译器会报错)。
  • 通常用于:
    初始化赋值(右边)
    函数参数(按值传递或绑定到右值引用)
    作为函数返回值(按值返回)
    只在该表达式中有效,其值在包含该表达式的语句结束后往往不再需要(将被销毁)。

例子:

int calculate() { return 100; }int main() {int a = 20;             int b = a + 5;          // (a+5)是右值(临时计算结果)int c = calculate();    // 函数返回值是右值int d = 30;             // 30本身是右值// 错误用法:// &(a+b);              // 错误!临时结果无地址
}

二、左值引用右值引用

1.左值引用

在这里插入图片描述

2.右值引用

在这里插入图片描述
在这里插入图片描述
实际场景对比

// 传统方式(左值引用)
void process_copy(const std::vector<int>& data) {// 只能读取,无法优化临时数据
}// 现代方式(右值引用重载)
void process_move(std::vector<int>&& data) {// 直接接管临时数据的资源
}int main() {std::vector<int> temp = generateData(); // 生成1GB数据// 传统处理 - 产生额外拷贝process_copy(temp);        // ✅ 安全但慢(保留下次使用)// 优化处理 - 避免拷贝process_copy(generateData());   // ❌ 低效:临时数据仍被拷贝process_move(generateData());   // ✅ 高效:直接接管资源// 显式移交所有权process_move(std::move(temp));  // ⚠️ 移交后temp不再可靠
}

注意:非const左值引用​​不能绑定到右值​

总结

左值​​:有名字、有地址的对象。
​​右值​​:临时对象,没有名字。
​​左值引用(T&)​​:只能绑定左值,用于别名。
​​右值引用(T&&)​​:只绑定右值,用于移动语义。
​​std::move​​:让左值变成右值引用。
​​std::forward​​:在泛型编程中保持值类别。

记住核心目的:右值引用和移动语义是为了避免不必要的拷贝,提升性能。

三、integral_constant

定义常量一般使用:枚举、static、const 去定义。integral_constant可以让我们在预编译期定义常量
基础使用方式如下:

	typedef std::integral_constant<int, 100>::type TestValue;int a = TestValue::value;

四、integral_constant的元模板使用案例

1.求最大整数

定义:

template<int,int...Args>
struct IntMax;template<int a>
struct IntMax<a> : std::integral_constant<int,a>
{};template<int a1,int a2, int...Args>
struct IntMax<a1, a2, Args...>: std::integral_constant<int, a1 >= a2 ?IntMax<a1, Args...>::value :IntMax<a2, Args...>::value>
{};

使用:

std::cout << IntMax<1, 2, 5, 4, 3>::value << std::endl;

2.内存对齐

alignof关键字

用于内存对齐

	struct FStruct{int a;float b;char c;double d;};std::cout << alignof(FStruct) << std::endl; // 结果为8std::cout << sizeof(FStruct) << std::endl; // 结果为24  //int 4 float 4  ||  char 1 -> 8  ||  double 8  ==> 3*8 = 24

元模板计算内存对齐

定义:

template<typename...Args>
struct AlignofStuct : std::integral_constant<int,IntMax<std::alignment_of<Args>::value...>::value>
{};

使用:

	std::cout << AlignofStuct<int, char, float, double>::value << std::endl;
http://www.dtcms.com/wzjs/545948.html

相关文章:

  • 前端学校网站开发视频江门建站公司
  • 东莞高端网站设计h5与wordpress
  • 网站后台栏目微信开发者工具怎么使用
  • 莱芜吧贴吧高明公司搜索seo
  • 备案号怎么放置到网站太原招聘网站开发
  • jsp做网站图片怎么存储前端工作一年工资多少正常
  • 家用电脑可以做网站服务器推广平台有哪些平台
  • 网站助手 伪静态物流百度推广怎么做网站
  • 兰州做网站开发wordpress归档页面
  • 做土特产的网站国家反诈中心app下载注册
  • 网站提交搜索引擎后出现问题免费网络游戏大全
  • 重庆哪里可以做网站的浏览不良网站会被网警抓吗
  • 烟台市住房和城乡建设局网站中核二三建设有限公司
  • 桓台县建设局网站下载应用的app
  • 安防网站建设优点贵州省建设厅官方网站
  • 北京网站备案域名贵阳门户网站建设
  • 在菲律宾做网络网站犯法吗网站建设最便宜多少钱
  • 嘉兴网站制作哪里好服务器上建设网站
  • 这个网站做海外推广网页设计与制作项目
  • 做下载网站用阿里云的什么产品广州广州网站建设公司
  • 苏州做网站的公司排名互联网推广解决方案
  • 百度权重查询爱站网wordpress 代码执行
  • 北京网站开发网站建设咨询网站科技动效
  • wordpress怎么下载seo公司培训课程
  • 怎么做企业网站二维码扫描ps如何做网页
  • wordpress调用会员等级桂林seo顾问
  • 上海好的网站制作公司网络平台怎么建立网站吗
  • php网站开发实战建设学校网站的原因
  • 做网站的公司上海盐城网站建设价格
  • 301 网站 怎么做平台建设网站公司