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

asp网站模板源码wordpress导航去掉多余的样式

asp网站模板源码,wordpress导航去掉多余的样式,常德人才网,上海品牌网站开发C引用深度详解 前言1. 引用的本质与核心特性1.1 引用概念1.2 核心特性 2. 常引用与权限控制2.1 权限传递规则2.2 常量引用2.3 临时变量保护1. 样例2. 样例3. 测试 三、引用使用场景分析3.1 函数参数传递输出型参数避免多级指针高效传参 3.2 做函数返回值正确使用危险案例 4. 性… C引用深度详解 前言1. 引用的本质与核心特性1.1 引用概念1.2 核心特性 2. 常引用与权限控制2.1 权限传递规则2.2 常量引用2.3 临时变量保护1. 样例2. 样例3. 测试 三、引用使用场景分析3.1 函数参数传递输出型参数避免多级指针高效传参 3.2 做函数返回值正确使用危险案例 4. 性能对比实验4.1 参数传递效率4.2 返回效率对比 5. 引用与指针的终极对比5.1 底层实现5.2 特性对比表 6. 高级应用技巧6.1 链式操作 7. 总结引用要点8. 最佳实践指南 前言 本文深度探索引用的各种用法和特性。介绍引用的语法核心特性引用的权限控制常引用以及引用的各种使用场景。 1. 引用的本质与核心特性 1.1 引用概念 引用Reference是C引入的重要特性是 C 中的一种数据类型。 从语法层面讲引用是变量的别名。与指针不同引用在语法层面不开辟新空间而是与原变量共享内存地址。 引用不会创建新的对象只是创建另一个访问现有对象的方式引用类型变量是已有变量的别名。 引用在语法上与指针类似但其语义和使用方式不同。 我们创建一个变量其实就是对一块内存空间取名字 而创建引用类型对象就是对已有的一块空间取第二个名字。 两个名字代表的是同一块空间。 int main() {int a 10;int ra a; // ra是a的别名ra 20; // 修改ra等同于修改acout a; // 输出20 }可以看到: 对ra进行操作也就是对a进行操作。变量ra和ra具有相同的地址。 1.2 核心特性 特性说明示例验证必须初始化定义时必须绑定实体int r; 编译错误不可重绑定绑定后不能指向其他变量int b20; rab; 实为赋值类型严格匹配必须与实体类型一致double d1.1; int rdd; 错误多级别名支持可对引用再次引用int rrara; 合法 int main() {int a 666;int num 100;int b a;int c b; //可对引用再次引用int d c; //可对引用再次引用//int e; //引用必须初始化该语句编译会报错。cout d endl;d num; //引用一旦指定不可修改 所以这里是 赋值 是把num的值 100 赋值给 d cout a endl; //输出的地址相同cout b endl;cout c endl;cout d endl;cout a endl; //输出的值相同cout b endl;cout c endl;cout d endl; }引用必须初始化引用一旦指定不可重绑定引用的类型严格匹配一个变量可以有多个引用(多个别名)引用变量也可以有引用(引用的别名)。在语法层面上 我们认为 引用没有开辟新空间 只是对同一片内存空间取了多个名字 2. 常引用与权限控制 2.1 权限传递规则 操作合法性说明变量 → 常引用✔️权限缩小常量 → 非 常引用❌权限放大常引用 → 常引用✔️权限不变 注意事项 权限可以平移。权限可以缩小。权限不能放大。 看如下此处有报错为什么 1. 首先声明每个变量名都有其相应的权限。 2. 也就是说每块内存都有相应的权限。 3. 引用就是对一块内存起了别名 int x 0, 创建变量xint y x, y是x的引用。此处 y是int型的引用发生了权限的平移。const int z x 此处发生了权限的缩小。该内存块在使用名字z时权限为const不能修改。名字x和y权限相同即 该内存块在使用名字x和y时可以修改因此x正确 z会报错。 2.2 常量引用 int main() {const int a 10;//int ra a; //编译出错因为 a为常量const int ra a; //正确写法//int b 10; //编译出错因为 10 为常量, 该语句产生了权限的放大const int b 10; //正确写法return 0; }对const int a 10;, 有int ra a 编译出错因为 a为常量 该语句发生了权限的放大 2.3 临时变量保护 1. 样例 声明1在C/C中只要发生类型转换就会产生临时变量。 声明2临时变量具有常性(不能修改)。 类型转换时会产生具有常性的临时变量看以下例子 double d 12.34;//int rd d; //编译出错因为 类型不同const int rd d; // 合法等价于// int temp d; // d为3.14, 常量// const int rd temp;以上过程如下 引用时发生类型转换实质上是对临时变量的引用。临时变量具有常性。double d 12.34 ,//int rd d; //编译出错。临时变量具有常性实质上可以理解为int rd const temp发生了权限的放大因此报错。临时变量具有常性。const int rd d, 实质上可以理解为const int rd const d, 是权限的转移。因此正确。 2. 样例 声明3函数在进行值返回时返回的同样是临时变量。该临时变量是原函数的拷贝。 实际上返回的是具有常性的临时变量。 清楚了这一点后以下例子的原理同上。 //例子 int func1() { //返回x的拷贝会产生临时变量static int x 10;return x; }int func2() { //返回x的别名 不会产生临时变量static int x 10;return x; } int main() {//int x func1(); //权限放大,错误。int x1 func1(); // 仅拷贝const int y func1(); //权限平移可以进行int ret2 func2(); //可以权限的平移 const int ret2_ func2(); //可以权限的缩小//总结func返回的是一个变量的别名 return 0; }3. 测试 //测试类型转换时会产生临时变量 int main() {int i 10;double j 10.11;//过程double temp i; double j temp//该过程会发生类型提升//一般是小的往大的进行类型提升,提升的时候不能改变原变量。//因此只能产生原变量的副本即临时变量if (j i) //此处是 double j 和 double i的比较cout xxxxxxxxxxxxx endl;return 0; }运行结果如下 三、引用使用场景分析 3.1 函数参数传递 输出型参数 //利用引用可以避免指针和多级指针 void Swap(int a, int b) { //交换值 形参是实参的别名int temp a;a b;b temp; }避免多级指针 void Swap(int* a, int* b) { //交换指针 如果不用引用交换指针变量需要用二级指针int* temp a;a b;b temp; }高效传参 struct BigData { int arr[10000]; };// 值传递拷贝4w字节 void ProcessData(BigData data); // 引用传递仅传地址4 或 8字节 void ProcessDataOpt(const BigData data);3.2 做函数返回值 正确使用 int GetStatic() {static int count 0;return count; // 静态变量 生命周期足够 }危险案例 int DangerousRet() {int local 10;return local; // 返回局部变量引用 }如果函数返回时出了函数作用域如果返回对象还在(还没还给系统)则可以使用引用返回。如果已经还给系统了则必须使用传值返回。 不能返回局部对象(变量)的引用。 4. 性能对比实验 4.1 参数传递效率 struct HugeStruct { int data[10000]; };void ValueFunc(HugeStruct hs) {} // 值传递 void RefFunc(const HugeStruct hs) {} // 引用传递// 测试结果10000次调用 // 值传递耗时1587ms // 引用传递耗时2ms4.2 返回效率对比 HugeStruct g_data;HugeStruct ReturnByValue() { return g_data; } HugeStruct ReturnByRef() { return g_data; }// 测试结果100000次调用 // 值返回耗时3521ms // 引用返回耗时1ms5. 引用与指针的终极对比 5.1 底层实现 ; 引用实现 mov dword ptr [a], 0Ah lea eax, [a] ; 取地址 mov dword ptr [ra], eax ; 指针实现 mov dword ptr [a], 0Ah lea eax, [a] mov dword ptr [pa], eax关键区别 引用在 C 中引用通常会被优化为指针底层是通过地址访问但语法上没有指针的显式解引用和取地址操作。指针指针显式地存储内存地址允许进行指针算术操作指针本身也可以为空nullptr。 从底层来看引用和指针的实现非常相似都是通过存储地址来实现对变量的间接访问。区别在于语法和语义上引用在 C 中看起来更像是变量的别名而指针则显式地表示地址。 5.2 特性对比表 特性引用指针初始化要求必须可选空值无NULL引用支持NULL重定向不可可以访问方式直接访问需解引用(*或-)类型安全更高较低多级间接单级支持多级sizeof返回原类型大小返回地址大小(4或8字节) 6. 高级应用技巧 6.1 链式操作 struct Matrix {Matrix Transpose() { /*...*/ return *this; }Matrix Rotate(double angle) { /*...*/ return *this; } };Matrix mat; mat.Transpose().Rotate(45); // 链式调用7. 总结引用要点 引用概念上定义一个变量的别名指针存储一个变量地址。引用在定义时必须初始化指针没有要求引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何一个同类型实体没有NULL引用但有NULL指针在sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下占4个字节)引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小有多级指针但是没有多级引用访问实体方式不同指针需要显式解引用引用编译器自己处理引用比指针使用起来相对更安全 8. 最佳实践指南 优先const引用函数参数尽量使用const T形式警惕返回引用确保返回对象生命周期足够替代输出参数用引用替代指针作为输出参数类型转换注意隐式转换产生临时变量需用const引用与智能指针配合std::shared_ptrT管理资源(后续讲解) 以上就是关于引用的所有内容了码字整理不易欢迎各位大佬在评论区交流
http://www.tj-hxxt.cn/news/131809.html

相关文章:

  • 典当行网站策划网站建设 精品课程
  • 百度网站的设计风格网站如何进行代码优化
  • 菏泽网站建设公司蓝希科技客户管理软件排名免费
  • 安卓软件开发公司宁波seo网络推广报价
  • 网站域名费会计分录怎么做贵港网站设计
  • 中煤第三建设集团网站外贸建站代理
  • 网站的商桥怎么做wordpress定时器插件
  • 网站建设通查询wordpress 外链跳转
  • 自已建网站微信登录重庆门户网站开发报价
  • 网络公司代做的网站注意事项洛阳便宜网站建设价格
  • 网站收录率高端汽车网站建设
  • 成品网站和模板建站上海企业建站方案
  • 南宁做网站seo中建西部建设网站
  • 有哪些公司百度seo2022
  • 邢台企业网站建设报价网络企业网站建设方案
  • 青岛建站平台广州市住建局官网
  • 怎么在企业站建立网站吗人社通成都app下载
  • 企业网站开发注册专做皮鞋销售网站
  • asp网站例子搭建免费个人网站2022
  • 网站栏目设计规划表网站设计宣传广告方案
  • 手机下载视频网站模板下载失败网站建设周期计划
  • 手机网站竞价单页wordpress获取单篇文章
  • 肃宁县网站建设价格6做网站
  • 集团网站开发公司手机如何制作网站
  • 郑州网站建设公司qq百度怎么发免费广告
  • 静态网站做淘宝客商丘企业网站建设服务
  • cms网站后台管理系统专业的网页制作服务好
  • 乐清网站建设网站建设网页设计个人简历实训报告
  • 济南网站开发北京网页制作设计
  • 深圳优化网站关键词wordpress系统下载