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

joomla 网站建设网页广告

joomla 网站建设,网页广告,王店镇建设中心小学网站,西部数码这一讲只讲了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/150433.html

相关文章:

  • 长沙做网站团队网店运营与推广
  • 零基础怎么学美工推广关键词优化
  • 企业网站建设选题的依据及意义小程序开发公司十大排名
  • 毕业设计购物网站怎么做百度一下首页极简版
  • 石家庄视频网站建设公司湖北seo关键词排名优化软件
  • 网站验证码文件流程优化四个方法
  • 电商网站 建社区百度推广账户登陆
  • 网站如何做生僻词引流网络媒体广告代理
  • 建设 公司 网站 请示国内免费顶级域名注册
  • 柴沟堡做网站网址seo查询
  • 做网站百度排前位seo课程培训视频
  • 洛阳做网站价格如何在百度上做推广
  • 寻找网站制作公司今日头条十大新闻
  • 网站建设目标的技术可行性中文域名的网站
  • 电影网站开发与设计深圳网络推广推荐
  • 公司做网站需要哪些资料今天最新的新闻头条
  • 烟台个人网站建设seo和sem是什么
  • 济铁工程建设集团公司官方网站短视频seo排名
  • 网站开发知识seo诊断工具
  • 彩票游戏网站开发郑州百度推广公司地址
  • 常德网站建设常德外链信息
  • 做图书馆网站的语言成都seo公司
  • java做电子政务网站系统宁波seo推广方式排名
  • 淘宝做的代码能在其他网站用吗百度网站的网址
  • 动态网站开发案例教程广告设计自学教程
  • 网站建设适应全屏如何自动刷推广链接
  • 做网站建设公司赚钱搜狗登录入口
  • excel网站链接怎么做批量酒店线上推广方案有哪些
  • 做外贸的数据网站有哪些seo搜索优化技术
  • 陕西天工建设有限公司网站网站规划