我为什么要这样做:
inline double square (double x) { return x*x;}
Run Code Online (Sandbox Code Playgroud)
代替
double square (double x) { return x*x;}
Run Code Online (Sandbox Code Playgroud)
有区别吗?
Gre*_*ill 82
前者(使用inline)允许您将该函数放在头文件中,它可以包含在多个源文件中.使用inline在文件范围内创建标识符,就像声明标识符一样static.如果不使用inline,您将从链接器中获得多个符号定义错误.
当然,除了对编译器的提示之外,还应该将函数内联编译到使用它的位置(避免函数调用开销).编译器不需要根据inline提示进行操作.
Eri*_*dek 26
是,有一点不同.https://isocpp.org/wiki/faq/inline-functions.
当您指定函数是内联时,您正在使编译器将方法的代码放在调用它的位置.
void myfunc() {
square(2);
}
Run Code Online (Sandbox Code Playgroud)
是完全相同的
void myfunc() {
2 * 2;
}
Run Code Online (Sandbox Code Playgroud)
调用函数有利于代码清晰度,但是当调用该函数时,必须将本地状态推送到堆栈,为该方法设置新的本地状态,并且当完成时,需要弹出先前的状态.这是很多开销.
现在,如果您提高了优化级别,编译器将做出诸如展开循环或内联函数之类的决策.编译器仍然可以忽略内联语句.
来自Wikipedia:内联函数是一个函数,已请求编译器执行内联扩展.换句话说,程序员已经请求编译器在调用函数的每个位置插入函数的完整主体,而不是生成代码以在定义它的一个位置调用函数.编译器没有义务尊重此请求.
http://en.wikipedia.org/wiki/Inline_function
| 归档时间: |
|
| 查看次数: |
53601 次 |
| 最近记录: |