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

阳春网站建设哪家网络推广好

阳春网站建设,哪家网络推广好,河间网站建设,自己做网站用软件这一讲只讲了inline内联函数,因为之前没有上完课的缘故所以更新得比较着急。之后类和对象的逻辑性太强了,没办法分开很多博客来讲,所以这个只是水的一篇博客,敬请谅解! 目录 1.inline 2.总结 1.inline (1…

这一讲只讲了inline内联函数,因为之前没有上完课的缘故所以更新得比较着急。之后类和对象的逻辑性太强了,没办法分开很多博客来讲,所以这个只是水的一篇博客,敬请谅解!

目录

1.inline

2.总结


1.inline

(1)用inline修饰的函数叫做内联函数,编译是C++编译器会在调用的地方展开内联函数,这样调用 内联函数就不需要建立栈帧了,可以提高效率。

我们在C语言中学了宏,宏函数也会在预处理的时替换展开,但是宏函数实现很复杂且很容易出错的,且在调用时也不会去调试,而是直接展开宏函数里面的内容,C++设计了inline函数的目的就是替代C语言的宏函数。你可以试着写一下两个变量相加的宏函数,有以下几个版本可能会写出来:

#define Add(a,b) a+b
#define Add(a,b) (a)+(b)
#define Add(a,b) (a+b)
#define Add(a,b) ((a)+(b))

但是最终只有第四个才是正确的写法,因为我们的形参a,b可以是变量、表达式、而我们传参的时候是直接替换掉Add(a,b)如:int ret=Add(3*2,4-1)如果按照各个版本则展开分别为:

3*2+4-1    (3*2)+(4-1)     (3*2+4-1)    ((3*2)+(4-1))但是结果都是一样的,但如果把int ret=Add(3*2,4-1) *5那么每一个展开的表达式分别为:

3*2+4-1*5=5      (3*2)+(4-1)*5=21    (3*2+4-1)*5=45    ((3*2)+(4-1))*5=45

虽然后面两个结果是一样的,但是如果在宏定义时的+改为*那么结果就会差很多!

那里面的括号的作用是什么呢?

这个东西的作用是防止出现运算符优先级的问题而导致出错,如我们之前学过的&、|它的优先级小于+则我们如果在传参的时候实参有这两个符号也会报错。

所以宏函数不仅要防止运算符优先级问题还要防止外围运算而导致的结果出错的问题,这样很麻烦!所以才引出来inline内联函数。

(2)inline适用于频繁调用的短小函数,对于递归函数和代码相对多一些的函数(一般以10行为划分),加上inline是也会被编译器忽略。因为这取决于inline的一个灵活性,inline出现时编译器也可以在调用的地方不展开。我们在每一个函数加个inline也没有事,因为它最终是否起作用都取决于编译器。所以,inline只是一个建议。且inline不是C++规定的。

(3)vs编译器debug版本下面默认是不展开inline的,这样方便调试。

如果过长的函数假设有100行代码,且调用10000次,在展开的情况下就有10000*100行,而在不展开的情况下只要10000+100行。

(4)声明和定义不在同一个文件,不能用内联,内联会导致链接错误!

在头文件中加上inline内联,至于原因,你们可以选择性的去看(需要借助函数栈帧的创建和销毁的知识):

如果我们有个头文件,而在源文件中包含了这个头文件,则在预处理时包含头文件的那个部分会进行头文件的替换,之后就会call被调用函数的地址,但现在没有地址,因为我们只包含了.h只有声明,但编译器会过,会认为这个文件有其他的cpp文件定义了,而会在链接这一个环节去找,链接是把不同的目标文件合并到一起编译了以后其次生成可执行程序,然后去目标文件的符号表里面去找,但是找不到,所以就会报错。只有声明而找不到定义就会出现链接错误。但为什么我们有定义结果却报错呢?

内联会认为内联不需要链接,会认为内联函数在调用地方都替换了,但是在定义的时候的.cpp文件中也替换了,这样就不用去符号表里面找了。

这个都是听不懂的,太复杂了,只要了解就可以了。所以之后用内联函数就直接在.h的头文件中定义就可以了。因为都会展开。所以之后就不能把内联函数放在两个文件中。

但普通函数不能放到.h文件中,因为会冲突。这个只要记住就可以了,不会考。

2.总结

因为之后的类和对象是一个很大的点,这个inline只是为了方便之后的使用而介绍的一个东西,而类和对象的就需要很大的理解能力了。不过类和对象(上)应该明天晚上就能更新完成,到时候再说。下讲再见!

http://www.dtcms.com/wzjs/512957.html

相关文章:

  • 企业自助建站系统操作流程百度指数在线查询前100
  • 网站查外链网推接单平台有哪些
  • 买到域名网站怎么做站长工具的使用seo综合查询排名
  • wordpress pdf下载链接seoul是什么意思中文
  • 营销网站推荐青岛seo推广专员
  • 邯郸网站开发定制图片外链
  • 做普工招聘网站百度学术论文官网入口
  • 阿里云网站建设步骤可以直接打开网站的网页
  • 搜狗网站制作百度官网链接
  • 绍兴网站的优化阿里云域名
  • 微网站建设网站百度营销是什么
  • 网站前台设计过程搜狗排名优化工具
  • 长春火车站电话咨询电话常见的搜索引擎有哪些?
  • 武汉网站开发培训班关键词全网搜索指数
  • 技术支持 昆明网站建设营销型制作网站公司
  • 做视频网站需要多大的带宽贵州二级站seo整站优化排名
  • b2c网站举例武汉网站提升排名
  • 做衣服网站代运营
  • 网站建设前台后台教程网络媒体推广报价
  • 网站建设马鞍山seo建站技术
  • 国外档案网站建设培训机构咨询
  • 网站建设案例资料seo自动优化软件
  • 网站到期忘记续费上海seo优化服务公司
  • 做网站需要准备哪些材料品牌推广活动有哪些
  • 一个人做网站的swot兰州百度推广的公司
  • 网站策划的步骤网站检测
  • 网站数据比较关键字排名查询
  • 织梦网站首页打开慢网页模板图片
  • 特色的南昌网站制作电商平台排行榜
  • 长白山开发建设集团网站网站推广怎么做有效果