C++编程思想学习——内联函数
来源:互联网 发布:西安百度自然排名优化 编辑:程序博客网 时间:2024/05/21 05:36
1、预处理器的缺陷
预处理器的宏虽然降低了函数调用的额外开销,使用宏也表面上好像是使用函数一样。但是,使用宏时可能在预处理器的展开后,表达式的优先级,以及表达式展开后的多次求值可能使我们的程序获得的结果并不是我们所要求的,特别是将宏当做函数一样使用时。由于宏存在这样的缺点,但是,为了效率,所以,产生了内联函数。内联函数几乎具有函数的一切行为,但是却不需要函数调用的开销。
2、内联函数
内联函数定义一般放在头文件中,这样编译器看到定以后就会将其放到符号表中。当使用函数时就可以检查函数的使用及其类型是否正确。默认在类内部定义的函数为内联函数。同时,也可以在非类的内部的函数前加inline关键字将其变为内联函数。由于,内联函数为内部连接,所以,内联函数的声明和定义一般是在一个文件内。内联函数适合函数体较小的功能实现。如果,函数较大则会产生代码膨胀,会降低效率。
内联函数的一个主要使用就是用作类内部的修改器和访问器。
3、内联函数和编译器
当调用一个内联函数时编译器对函数的正确性检查完毕后将内联函数放入符号表(包括内联函数的函数体)。
但是,如果内联函数的代码过大、过长时编译器将会将内联函数当做普通函数处理,不做内联。同样,如果程序中要去内联函数的地址时,编译器也会为内联函数分配存储空间,将内联函数当做普通函数处理,当地址不用时编译器又将内联函数正常使用。
内联函数在一个类中引用可以引用一个还未在类中声明的函数。因为C++规定只有在类生命结束后,其中的内联函数才会被计算。
构造函数和析构函数一般为内联函数,但是,在构造函数和析构函数中可能会隐藏行为,因为,类中可能包含子对象,子对象的构造函数和析构函数必须在父对象的构造函数中被调用。这些子对象可以是成员对象,或者是由于继承而存在。所以,有些构造函数和析构函数也不应该是内联函数。
但是,为了减少类的接口的混乱,最好将内联函数的定义放在类的外面。然后用inline关键词来优化。
但是,因为内联简单所以,内联函数也许在类的定义里被多次使用,程序设计者都会这样做。后来如果想让程序规模减少时,可以将内联函数移出内联,这不会影响程序的功能。程序设计的原则是:先让程序跑起来,然后才是优化。
“##”它允许两个标识符并它们粘贴在一起自动产生一个新的标识符。
本文为个人学习C++编程思想时个人心得体会,所以,难免有不严谨之处,甚至有可能是错误的理解。如发现错误,或者疑问。欢迎提出讨论,共同学习、进步。
- C++编程思想学习——内联函数
- C++编程思想笔记——内联函数
- C++编程思想学习笔记---第九章 内联函数
- C++编程思想——内联
- C++笔记——c++编程思想(上)第九十章 内联函数及名字控制
- (c++)——内联函数
- (c++)——内联函数
- 【C++】学习笔记三十九——内联函数
- C++编程思想学习—函数重载与默认函数
- C++编程思想读书笔记--之内联函数(inline)
- C++编程思想(2nd卷一):内联函数
- C++编程思想(2nd卷一):内联函数
- C++编程思想读书笔记之 第八章 内联函数
- C++编程思想----第9章、内联函数
- C++编程思想学习——多态性与虚函数
- C++编程思想学习—C++中的C特征
- 学习笔记——内联函数
- kotlin学习笔记——内联函数
- Ajax使用WebService无刷新验证注册用户的唯一性
- spring HibernateTemplate调用存储过程
- 黑马程序员_记事本小应用
- android 简单实现获取网络图片
- 屏幕分辨率知多少
- C++编程思想学习——内联函数
- 无刷新页面验证用户是否存在
- ASP无刷新验证用户名是否存在
- java序列化对象
- z排序算法的稳定性
- Dm3730 调试心得3
- 终于找到保持热情和积极性的方法了
- c++中const的含义
- 谈谈今天的面试