C++ inline

C++ inline函数

1 int big(int a, int b) {
2     return a > b ? a : b;
3 }

上面是求两个数中较大者的函数,当然我们可以在任意使用big(a, b)的位置用如下这句话代替:(a > b ? a : b).

把这种小操作定义为函数的优缺点如下:
优点:
1. 阅读和理解函数的调用比读懂等价的表达式容易。
2. 使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3. 修改函数比修改所有位置的等价表达式更容易。
4. 函数可以被其他应用重复利用,省去了编码的代价。
缺点:
1. 调用函数比求等价的表达式慢。
函数调用包含一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。

内联函数可避免函数调用的开销
将函数指定为内联,通常就是将它在每个调用“内联地”展开。假设吧big函数定
义为inline,则如下调用
cout << big(a, b) << endl;
在编译过程中展开成类似于下面的形式
cout << (a > b ? a : b) << endl;

1、内联函数对于编译器来说只是一个建议,编译器可以选择忽略这个建议。
2、内联函数应该在头文件中定义,这一点不同于其他函数。
3、在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。
4、内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点内联展开该函数的代码。
5、为了使得inline声明内联函数有效,我们必须将inline关键字与函数体放在一起才行,否则inline关键字是不能成功将函数声明内联函数的。

更多:https://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0

时间: 2024-07-30 16:58:02

C++ inline的相关文章

Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^). 注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则 内联汇编(或称嵌入汇

[c++] Inline Function

The inline functions are a C++ enhancement feature to increase the execution time of a program. Compiler replace the definition at compile time instead of referring function defination at runtime. NOTE - This is a suggestion to compiler to make the f

去除行内(inline/inline-block)元素之间的间距

先展示一下,行内元素之间存在间距,实例代码如下: <style> div { color: #fff; padding: 25px 50px; } .inline-f00 { display: inline; background: #f00; } .inline-0f0 { display: inline; background: #0f0; } .inline-block-00f { display: inline-block; background: #00f; } .inline-bl

display:inline 跟 display:block 跟 display:inline-block区别

我来说句人话吧.display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-block; 就是在同一行内的块级元素. 说概念太模糊,来个真实案例吧. <a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a> <a

inline block inline-block总结

一.block表示块级元素,其元素通常会单独成一块,独占一行: 二.inline表示内联元素,不会产生换行,其排版会在一行显示,直到一行被占满. 三.常见的块级元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等:常见的内联元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR        等. 四.一般使用display:block与display:inline来改变元素的

块级元素和行内元素的区别 (block vs. inline)

块级元素 (display: block) 独占一行,多个block元素会各自新起一行.默认情况下,block元素的宽度会填满父元素的宽度. 可以设置width, height属性.但是,即使设置了width属性,仍然独占一行. 可以设置margin, padding. 行内元素 (display: inline) HTML元素分为替换元素和非替换元素. 替换元素是指浏览器根据其标签的元素与属性来判断显示具体的内容.例如img,input等. HTML中大多数元素是不可替换元素,他们将内容直接告

inline函数和一般的函数有什么不同

1.比如: 1 int g(int x) 2 { 3 return x + x; 4 } 5 6 int f() 7 { 8 return g(); 9 } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者. 如果g是inline的话.f会被直接编译成. 1 int f() 2 { 3 return x + x; 4 } 相当于把g执行的操作直接融合到f里.这样减少了调用g消耗的时间,但同时也增大了f的尺寸. 这就是inline函数,也就是所谓的内联函数. 2.但是现在不

C++中的inline声明

C++中的inline声明 1. inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把函数指定为内联函数. inline int min(int first, int secend) { /****/ };   inline 函数对编译器而言必须是可见的,以便它能够在调用点(调用这个内联函数的位置)内展开该函数. 与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定 义.当然,对于同一程序的不同文件,如果in

条款30:透彻了解inline的里里外外(understand the ins and outs of inlining)

NOTE: 1.将大多数inline限制在小型 被频繁调用的函数身上.这可使日后的调试过程和二进制升级(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化, 使程序的速度提升机会最大化. 2.不要只因为 function templates 出现在头文件,就将他们声明为inline.