inline函数的优点: C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员.所以在C++ 程序中,应该用内联函数取代所有宏代码. inline函数与宏定义的区别: 1.宏定义只是简单的文本替换,不做任何安全性的检查也不像函数那样在栈上创建新的变量空间. (1)宏定义可能会造成cxy不希望的变量多次累加;在下面F宏定义中基本上是x出现了几次就会被累加了几次. #define F(x) x+x #define F3(x) x+x+x ; cout<<F(i…
在C++中内联函数: 内联函数即是在函数的声明和和定义前面加上“inline”关键字,内联函数和常规函数一样,都是按照值来传递参数的,如果参数为表达式,如4.5+7.5,则函数将传递表达式的值(这里为12),而宏定义则不同. 在C中的宏定义: C语言使用的预处理器语句#define来提供宏,例如:#define SQUARE(X)  X*X,这里宏并不是通过值传递来实现的,而是通过文本替换来实现的. 内联函数和宏定义的区别用下面的代码来观察: //内联函数 inline double squar…
C语言中有宏函数的概念.宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销.但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错. 1.内联函数基本概念 C++提供了 inline 关键字,实现了真正的内嵌. #include <iostream> using namespace std; inline void func(int a) { a = ; cout << a << endl; } int main(void) { func();…
inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s1, const string &s2) { return s1.size() < s2.size() ? s1 : s2; } 将 shorterString 写成函数有一个潜在的缺点:调用函数比求解等价 表达式要慢得多.在大多数的机器上,调用函数都要做很多工作;调用前要先保 存寄存器,并在返…
inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s1, const string &s2) { return s1.size() < s2.size() ? s1 : s2; } 将 shorterString 写成函数有一个潜在的缺点:调用函数比求解等价 表达式要慢得多.在大多数的机器上,调用函数都要做很多工作;调用前要先保 存寄存器,并在返…
1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3;  #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!) C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数 内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求. //宏替换和函数调用区别 #include "iostream" using namespace…
C++支持内联函数,目的是为了提高函数的执行效率,类似于C语言中的宏定义 内联函数在调用时将它在程序中的每个调用点展开,不用额外分配栈空间 内联函数的定义在一个源文件中出现一次,但在多个源文件中可以同时出现,只要保证完全相同即可. 所以内联函数可以直接在头文件中定义,即使被多次包含,也是完全相同的,因此不会报错. inline 内联函数的使用方法: inline 放在函数定义的返回值前面,就可以将函数指定为内联函数:仅仅放在声明函数前面时无效的 inline 返回值 函数名(形参) { 函数体…
今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数 static inline void dispatch_async_on_main_queue(void (^block)()) { if (pthread_main_np()) { block(); } else { dispatch_async(dispatch_get_main_queue(), block);…
内联函数,即在编译的时候将函数体替换函数调用,从而不需要将parameter,return address进行push/pop stack的操作,从而加速app的运行,然而,会增加二进制文件的大小. 比如,再源码中: [html] view plaincopyprint?   inline int foo(int a, int b) { return a + b; } void bar(int a, int b) { NSLog(@"%d", foo(a, b)); } 编译过后成为:…
demo //带参数的宏 #define MYFUNC(a, b) ((a) < (b) ? (a) : (b)) inline int myfunc(int a, int b) { return a < b ? a : b; } int main1402() { int a = 1; int b = 3; //int c = myfunc(++a, b); // a=2 b=3 c=2 int c = MYFUNC(++a, b); //==>宏替换并展开 ((++a) < (b…