《C++ Primer》笔记-inline内联函数
2013-07-22 16:24
211 查看
inline 函数避免函数调用的开销
将 shorterString 写成函数有一个潜在的缺点:调用函数比求解等价 表达式要慢得多。在大多数的机器上,调用函数都要做很多工作;调用前要先保 存寄存器,并在返回时恢复;复制实参;程序还必须转向一个新位置执行。
将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”
展开。假设我们将 shorterString 定义为内联函数,则调用: cout << shorterString(s1, s2) << endl;
在编译时将展开为:
从而消除了把 shorterString 写成函数的额外执行开销。
}
一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。 大多数的编译器都不支持递归函数的内联。一个 1200 行的函数也不太可能在调 用点内联展开。
把 inline 函数放入头文件
内联函数应该在头文件中定义,这一点不同于其他函数。
inline 说明对于编译器来说只是一个建议,编译器可以选择忽 略这个。
把 inline 函数的定义放在头文件中,可以确保在调用函数时所使用的定义是相同 的,并且保证在调用点该函数的定义对编译器可见。
在头文件中加入或修改 inline 函数时,使用了该头文件的所 有源文件都必须重新编译。
// find longer of two strings const string &shorterString(const string &s1, const string &s2) {
return s1.size() < s2.size() ? s1 : s2; }
将 shorterString 写成函数有一个潜在的缺点:调用函数比求解等价 表达式要慢得多。在大多数的机器上,调用函数都要做很多工作;调用前要先保 存寄存器,并在返回时恢复;复制实参;程序还必须转向一个新位置执行。
将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”
展开。假设我们将 shorterString 定义为内联函数,则调用: cout << shorterString(s1, s2) << endl;
在编译时将展开为:
cout << (s1.size() < s2.size() ? s1 : s2) << endl;
从而消除了把 shorterString 写成函数的额外执行开销。
// inline version: find longer of two strings inline const string & shorterString(const string &s1, const string &s2) {
return s1.size() < s2.size() ? s1 : s2;
}
一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。 大多数的编译器都不支持递归函数的内联。一个 1200 行的函数也不太可能在调 用点内联展开。
把 inline 函数放入头文件
内联函数应该在头文件中定义,这一点不同于其他函数。
inline 说明对于编译器来说只是一个建议,编译器可以选择忽 略这个。
把 inline 函数的定义放在头文件中,可以确保在调用函数时所使用的定义是相同 的,并且保证在调用点该函数的定义对编译器可见。
在头文件中加入或修改 inline 函数时,使用了该头文件的所 有源文件都必须重新编译。
相关文章推荐
- inline内联函数 [C++ Primer]
- C++ Primer 学习笔记_23_函数(续2) --局部对象、内联函数、类的成员函数
- C++ Primer 学习笔记12 函数(return语句、函数声明、局部对象、内联函数、类的成员函数、重载函数)
- C++笔记——内联函数inline
- c++ 学习笔记 ----内联函数(inline)
- C++学习笔记(二):内联函数inline
- 条款1:尽量用const和inline而不用#define [effective C++ 学习笔记]
- C++ primer【笔记】关联容器 map
- C++ Primer学习笔记:字面值常量使用小结
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
- C++ Primer 学习笔记_59_满载操作符与转换 -输入/输出、算术/关系操作符
- C++ Primer 学习笔记(第一章)
- C++ Primer 学习笔记:bitset和size_t
- C++ primer 笔记
- C/C++ inline 内联函数
- 我的学习笔记之四——inline使用DLL进行全局HOOK的改进(ring3_inline_dll_hook_Messagebox_临界区)
- c++ primer(第五版)学习笔记及习题答案代码版(第六章)函数
- C++ 内联函数inline
- 《c++ primer》 第14章 重载运算与类型转换 学习笔记
- C++学习笔记之——内联函数,引用