C++的优秀特性2:inline 函数
(转载请注明原创于潘多拉盒子)
Inline函数是C++的一个很小的特性,在不计较效率的情况下,这个特性似乎可有可无。然而,C++天生是为最为广泛的应用场景设计的,因此,总会有关于效率的问题。其实,除了效率,inline函数还提供了另外一个便利:可读性。当一个函数比较小,比如只有一个return语句,那么把实现和声明分开不是一个很好的办法。比如如下的一个成员函数:
class List
{
public:
size_t getSize() const
{
return _size;
}
private:
size_t _size;
};
如果将其中的getSize()函数的实现放在cpp文件中,则大大的不美:对于一个读者来读这个函数,可以在第一时间了解该函数的功能。效率也很高,几乎是访问成员变量一样的效率。
一个函数是否inline跟这个函数声明时是否使用inline关键字没有关系,比如这个inline函数虽然没使用inline关键字来声明,但却是inline的。反之,使用inline函数声明,则不一定是inline的,比如该函数的定义如果放在cpp文件中,则不是inline的。
使用inline来声明并在别处定义的inline函数,必须实在h文件中定义的:这很容易理解,因为inline是编译时行为,编译器需要将代码展开放在调用者代码中,因此编译器需要在h文件中看到定义。比如下面的例子:
class List
{
public:
size_t getSize() const;
private:
size_t _size;
}; inline size_t List::getSize() const
{
return _size;
}
其中的getSize()就是一个inline函数。但如果变成:
class List
{
public:
inline size_t getSize() const
private:
size_t _size;
}; // in cpp
size_t List::getSize() const
{
return _size;
}
虽然在声明时使用了inline关键字,但定义却放在了cpp文件中,因此不是inline函数。
虽然inline函数可以直接在声明处就地定义,也可以用inline关键字声明,再用inline关键字在h文件中定义,但是,出于以下的原因,建议在h文件中声明处就地定义。
原则:
1. inline函数的行数要很小,最好小于3行。因为如果inline函数很大, 那么调用的开销相对于执行的开销,就显得没那么大了,没必要inline。从可读性上来考虑,台大的函数实现会干扰可读性。
笔者看到过很大的函数,还用inline来实现,实在是没有必要,而且画蛇添足了。
建议:
1. 构造函数、析构函数,使用inline来实现。可读性、效率需求。
2. 简单的get、set函数,使用inline来实现。可读性、效率需求。
3. 频繁调用的小函数,使用inline来实现。主要是效率需求。
Inline函数是个很常用的功能,但是也不能滥用。
C++的优秀特性2:inline 函数的更多相关文章
- C++的优秀特性1:引用
(转载请注明原创于潘多拉盒子) 一本典型的C语言教科书的厚度大约是200页左右,而一本典型的C++教科书的厚度至少要500页.比如K&R的<The C Programming Langu ...
- c里面的static inline函数
一般来说加上static表示函数是文件作用域,有的时候单独使用inline编译器会优化,没有编译成内联函数,而是变成普通函数编译,所以必须在前面加上static,放在头文件中可以被外部文件访问. ...
- 总结Codeigniter的一些优秀特性
总结Codeigniter的一些优秀特性 近期准备接手改进一个别人用Codeigniter写的项目.尽管之前也实用过CI,可是是全然按着自己的意思写的,没按CI的一些套路.用在公众的项目,不妨按框架规 ...
- C语言inline函数(转)
原文链接:http://blog.csdn.net/yuan1125/article/details/6225993 1 inline只是个编译器建议,编译器不一定非得展开Inline函数. 例如: ...
- 【知识点】inline函数、回调函数、普通函数
目录 一.inline内联函数 1.1 使用 1.2 编译器对 inline 函数处理步骤 1.3 优缺点 1.3.1 优点 1.3.2 慎用内联 1.3.3 不宜使用内联 1.4 虚函数(virtu ...
- 理解C++的inline函数
C++的inline函数就是编译器在编译代码时,将"对此函数的每一个调用"都以函数本体替换之,该过程发生在编译期间. inline函数的优点是,它可以省去函数调用所带来的额外开销, ...
- C++ inline函数
本文主要记录了C++中的inline函数,也就是内联函数,主要记录了以下几个问题: C++为什么引入inline函数? 为什么inline能很好的取代表达式形式的预定义? inline函数的使用场合 ...
- inline函数的用法
在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数.栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间 ...
- effective c++:inline函数,文件间编译依存关系
inline函数 inline函数可以不受函数调用所带来的额外开销,编译器也会优化这些不含函数调用的代码,但是我们不能滥用Inline函数,如果程序中的每个函数都替换为inline函数那么生成的目标文 ...
随机推荐
- Math.random();函数 随机数
random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 document.write(Math.random()); ...
- YII 配置文件
用YIIFramework的库开发 .... Yii::createWebApplication($config); //没有run Yii::import(class1,true),在将class1 ...
- Android FrameWork——相关内容
http://blog.csdn.net/stonecao/article/category/781516
- Zabbix监控Linux磁盘I/O
东西都上传到这里了: https://github.com/RexKang/Zabbix/tree/master/OS/Linux-disk-discovery 需要用到的东西: Zabbix的L ...
- JavaScript对象(document对象 图片轮播)
图片轮播: 需要注意的HTML需要img标签,他和input标签一样,是非封闭的标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- nginx指令
Directives(指令) Syntax(语法): aio on | off | threads[=pool]; Default: aio off; Context: http, server, l ...
- 答 “SOA会不会造成IT黑洞?”
[文/ 任英杰] 随意间看到支点网的“SOA会不会造成IT黑洞”一文,作者对SOA的认识颇有以偏概全之嫌,写点自己的感想,作为应和吧. 作者的二个对SOA的观点有些偏颇:“SOA就是一种系统集成,它是 ...
- Python 学习笔记(五)杂项
1. Assert assert len(unique_characters) <= 10, 'Too many letters' #…等价于: if len(unique_characters ...
- 转-sketch技巧
10个帮你UI设计提速的Sketch使用技巧 2015-4-11 09:59| 发布者: yuanxingbbs| 查看: 1129| 评论: 0 选择使用Sketch的理由很多,因为好奇跟风安装 ...
- xcode import<xx/xx.h> 头文件报错
最近一直在写Android程序,有点久没用xcode,在写一个项目准备把 UI7Kit导进去,将iOS 7的界面适配到低版本的时候,出现了这么一个蛋疼的问题.稍微查了一下,新建项目的时候想先做一个li ...