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

网站正在建设 h5模板360竞价推广怎么做

网站正在建设 h5模板,360竞价推广怎么做,高级网页设计教程,网页美工设计培训学什么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/485005.html

相关文章:

  • 做公众号app 网站 app百度公司招聘岗位
  • 北京人力资源网站seo技术团队
  • 石家庄网站建设流程百度关键词搜索排行榜
  • 昆明网站建设推广服务今天
  • 黄村网站建设一条龙长沙建站seo公司
  • 十大免费ppt网站下载公司网站建设哪个好
  • 成人高考什么时候出成绩吉林seo管理平台
  • 大红门做网站的公司各大引擎搜索入口
  • 平谷微网站建设百度知道小程序
  • 广州哪里能建铝制自建房宁波seo推广外包公司
  • led外贸网站国家职业技能培训学校
  • 滨州网站开发网站上不去首页seo要怎么办
  • 白山做网站沈阳关键词seo排名
  • wordpress仪表盘添加内容市场seo是什么
  • 营销型网站的功能如何免费做网站网页
  • 微网站 底部导航菜单无锡网站建设
  • dedecms旅游网站模板微软优化大师
  • 优秀网页设计代码东莞网站建设优化
  • 微信小程序怎么做网站最好的免费推广平台
  • 国内免费视频素材无水印素材网站google下载手机版
  • 如何用vs2010做网站seo每日
  • 公司转让费用seo专业培训费用
  • 手机网站一般做多大尺寸百度seo官方网站
  • 网站开发实用技术pdf怎么做链接推广产品
  • 增城高端定制网站建设正规推广赚佣金的平台
  • 定制网站建设公司有哪些搜索排名广告营销怎么做
  • 上海做网站多少钱查域名
  • jsp动态网站开发视频教程深圳高端网站建设公司
  • 3 建设营销型网站流程图自动的网站设计制作
  • app下载我的订单seo中国是什么