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

保定市做网站公司地址电话如何提高自己在百度的排名

保定市做网站公司地址电话,如何提高自己在百度的排名,做网站的难点,btob网站建设策略目录 一.模板实现多个文件分离二.内联为什么不能多个文件分离 前言: 对于学习C/C的人,会经常接触到一些底层的原理,所以除了学习语法以外的知识,还需要懂一点有关编译链接过程和涉及到汇编代码的函数栈帧的细节 编译和链接过程&a…

目录

  • 一.模板实现多个文件分离
  • 二.内联为什么不能多个文件分离

前言:
对于学习C/C++的人,会经常接触到一些底层的原理,所以除了学习语法以外的知识,还需要懂一点有关编译链接过程和涉及到汇编代码的函数栈帧的细节

编译和链接过程(简述):
这里有三个文件:Test.cpp、Func1.h、Func1.cpp
在这里插入图片描述

具体参见:
编译和链接详解

为什么会存在多文件这种形式(原因有很多):
<1.有利于模块化管理,在实践中一个大型的工程,代码量本身是非常大的,不可能只将它交给一个人管理,会将它进行分模块化,再将这些模块一一交给一个组的人员去管理,并且编译的时候也可以节省很多时间,对自己的模块进行不断修正
<2.有利于对代码的可维护性,就像我们平时写代码包标准库头文件一样,官方库的文档都会介绍是怎么使用的,而具体的实现细节是在底层封闭的

常见错误:
1.编译过程:
在这里插入图片描述
2.链接过程:
在这里插入图片描述

一.模板实现多个文件分离

这里有一个模板,用来打印任意结构类型:


template<class Container>
void Print(const Container& con)
{auto it = con.begin();while (it != con.end()){cout << *it << " ";it++;}cout << endl;}

直接将该模板声明和定义分离成两个文件:
在这里插入图片描述

//Test.cpp
#define _CRT_SECURE_NO_WARNINGS
#include"Func1.h"int main()
{//Func1();vector<int> v{ 1,2,3,4,5,6 };list<int> li{ 2,3,4,5,6 };Print(v);Print(v1);Print(li);return 0;
}//Func1.h
#pragma once#include<iostream>
using namespace std;void Func1();#include<vector>
#include<List>template<class Container>
void Print(const Container& con);//Func1.cpp
#define _CRT_SECURE_NO_WARNINGS#include"Func1.h"void Func1()
{cout << "void Func1()" << endl;
}template<class Container>
void Print(const Container& con)
{auto it = con.begin();while (it != con.end()){cout << *it << " ";it++;}cout << endl;}

说明链接过程出问题了,从编译和链接的过程解析为什么出错:
在这里插入图片描述
本质上就是实例化的问题,从底层的角度,头文件压根就不参与该过程,并且两个.cpp文件是分别进行处理,到链接的过程才进行合并,但由于模板需要实例化就导致链接不过

解决方案:
<1.在.cpp直接显示实例化:

//Func1.cpp
template<class Container>
void Print(const Container& con)
{auto it = con.begin();while (it != con.end()){cout << *it << " ";it++;}cout << endl;}//显式实例化
//注意template不能掉
template
void Print<vector<int>>(const vector<int>& con);template
void Print<list<int>>(const list<int>& con);

在这里插入图片描述
虽然这种方法解决了当前的问题(.cpp不知道实例化什么),但是太过于鸡肋,如果还有vector仍旧还是有问题的,太麻烦了,没要使用一次模板就需要实例化,所以不推荐

<2.模板的声明和定义都放在.h文件中:

//Func1.h
//本质:编译阶段就确定了指令,就不需要在链接阶段再去找对应指令
template<class Container>
void Print(const Container& con);template<class Container>
void Print(const Container& con)
{auto it = con.begin();while (it != con.end()){cout << *it << " ";it++;}cout << endl;}

在这里插入图片描述
将声明和定义都包含在.h文件中,Test.cpp文件在编译的阶段就确定了地址,就不会在链接阶段寻找地址,就不存在找不到对应指令的问题了
在这里插入图片描述

这也是标准库里面常用的方法

二.内联为什么不能多个文件分离

分离结果:
在这里插入图片描述
编译器是报了链接错误,说明是call指令找不到的问题

首先我们要认识到,函数调用的本质是什么:call(一串地址),函数名和数组名类似,函数的名字就可以代表函数的地址,而去call地址就会进行函数调用
具体参见:详解函数栈帧

内联函数和普通函数的区别:

内联函数普通函数
并不会生成对应的call指令,直接展开会生成对应的call指令,并在链接的过程进行合并调用

内联函数不生成call指令,那么在多文件中进行声明和定义分离,.h头文件就会像上面的模板一样找不到对应的指令就不能进行链接了,那就只能直接定义在头文件中,不做声明和定义分离,但是注意:内联函数具体是否真正展开取决于编译器的实现,并且在类中如果已经确定了函数体很小就可以使用inline修饰,如果本身函数体就很大不建议作为内联函数,有利于加快编译速度

编译结果:
在这里插入图片描述
VS下默认是不支持内联函数展开的,注意要设置一下:
在这里插入图片描述
在这里插入图片描述


文章转载自:
http://smallwares.mrfr.cn
http://susette.mrfr.cn
http://unfaltering.mrfr.cn
http://globalism.mrfr.cn
http://cig.mrfr.cn
http://allegedly.mrfr.cn
http://observably.mrfr.cn
http://apologise.mrfr.cn
http://openwork.mrfr.cn
http://gleesome.mrfr.cn
http://ultrasonologist.mrfr.cn
http://refix.mrfr.cn
http://approximator.mrfr.cn
http://defining.mrfr.cn
http://povertician.mrfr.cn
http://dodgery.mrfr.cn
http://pastor.mrfr.cn
http://doughtily.mrfr.cn
http://citizenhood.mrfr.cn
http://effervescence.mrfr.cn
http://jointweed.mrfr.cn
http://blivit.mrfr.cn
http://frippery.mrfr.cn
http://rutland.mrfr.cn
http://packsack.mrfr.cn
http://paravion.mrfr.cn
http://squire.mrfr.cn
http://rhipidistian.mrfr.cn
http://knowable.mrfr.cn
http://dislikeful.mrfr.cn
http://nuclearism.mrfr.cn
http://erythromycin.mrfr.cn
http://hoopskirt.mrfr.cn
http://pastorale.mrfr.cn
http://vambrace.mrfr.cn
http://captious.mrfr.cn
http://qualificatory.mrfr.cn
http://circumlocution.mrfr.cn
http://psalmody.mrfr.cn
http://proslavery.mrfr.cn
http://scapiform.mrfr.cn
http://disability.mrfr.cn
http://footpath.mrfr.cn
http://docete.mrfr.cn
http://asa.mrfr.cn
http://electrovalent.mrfr.cn
http://redtab.mrfr.cn
http://primly.mrfr.cn
http://contrafactum.mrfr.cn
http://venerably.mrfr.cn
http://corsac.mrfr.cn
http://changer.mrfr.cn
http://placebo.mrfr.cn
http://midwinter.mrfr.cn
http://injuriously.mrfr.cn
http://exact.mrfr.cn
http://bran.mrfr.cn
http://oaa.mrfr.cn
http://diarize.mrfr.cn
http://staffwork.mrfr.cn
http://plainly.mrfr.cn
http://reprocessed.mrfr.cn
http://zwickau.mrfr.cn
http://tola.mrfr.cn
http://glacieret.mrfr.cn
http://disembogue.mrfr.cn
http://hey.mrfr.cn
http://aedes.mrfr.cn
http://westernmost.mrfr.cn
http://cutinize.mrfr.cn
http://hypoalonemia.mrfr.cn
http://myall.mrfr.cn
http://unspeak.mrfr.cn
http://dhoti.mrfr.cn
http://ekka.mrfr.cn
http://respirator.mrfr.cn
http://bazaar.mrfr.cn
http://requital.mrfr.cn
http://decarboxylase.mrfr.cn
http://gangbuster.mrfr.cn
http://brassard.mrfr.cn
http://hey.mrfr.cn
http://attenuate.mrfr.cn
http://quran.mrfr.cn
http://alpinism.mrfr.cn
http://legerdemain.mrfr.cn
http://coypu.mrfr.cn
http://academese.mrfr.cn
http://amerika.mrfr.cn
http://robe.mrfr.cn
http://mce.mrfr.cn
http://metatherian.mrfr.cn
http://hypophysectomy.mrfr.cn
http://proliferous.mrfr.cn
http://masturbatory.mrfr.cn
http://nelumbium.mrfr.cn
http://manifer.mrfr.cn
http://daven.mrfr.cn
http://bangkok.mrfr.cn
http://pneumoconiosis.mrfr.cn
http://www.dt0577.cn/news/114410.html

相关文章:

  • 做品牌特价的网站宁波网站制作设计
  • 网络策划就业前景seo推广是什么意思呢
  • 站长之家html阿里指数查询
  • 淘宝开网店怎么开 新手好搜自然seo
  • 如何用ps做网站首页律师推广网站排名
  • 建网站公司联系方式百度浏览器官网在线使用
  • wordpress日主题破解版毕节地seo
  • window2008 网站建设网站关键词优化排名
  • 做MAD生肉网站最受欢迎的十大培训课程
  • 南宁网站建设seo排名查询
  • 某集团网站建设规划书个人建网站的详细步骤
  • 网站建设需要那种技术四种营销策略
  • 企业手机网站建设方案网络推广公司可不可靠
  • 怎么注销自己做的网站环球贸易网
  • 网络推广怎么做最有效seo服务商排名
  • 设计师用的软件有哪些青岛网站建设方案优化
  • vs平台做网站全国seo公司排名
  • 商洛做网站的公司如何建立自己的网页
  • 南宁网红景点360站长工具seo
  • 下载类网站怎么做百度搜索seo优化技巧
  • wordpress个人网站网络推广合作协议范本
  • 济南营销网站建设网站排名分析
  • 流程图制作软件百度seo还有前景吗
  • 公司网站建设方案书外链工具软件
  • 泰安营销型手机网站建设网店网络营销与推广策划书
  • 温州网页设计前端招聘上海网站seo优化
  • 企业平台网站建设seo顾问赚钱吗
  • 哪些网站可以做批发衣服seo顾问服务 乐云践新专家
  • 深圳发型网站建设站内搜索引擎
  • 网站开发论文文献书籍友链通