c++学习(七):宏定义函数与内联函数
2016-12-24 17:07
218 查看
a.宏定义函数:
优点:
提高了程序的可读性,同时也方便进行修改;
提高程序的运行效率:
使用带参的宏定义既可完成函数调用的功能,又能避免函数的出栈与入栈操作,减少系统开销,提高运行效率;
缺点:
由于是直接嵌入的,所以代码可能相对多一点;
嵌套定义过多可能会影响程序的可读性,而且很容易出错;
对带参的宏而言,由于是直接替换,并不会检查参数是否合法,存在安全隐患。
不能debug。
//macro
#define MYDELETE(ptr) \
delete ptr;\
ptr = NULL;
//macro
int* mymacro1 = new int;
if (mymacro1!=NULL)
{
MYDELETE(mymacro1);
}
b.内联函数:
C++增加了内联函数(inline),实现起来比带参数的宏更方便,这样的宏在C++中已经很少使用了。
b.1优点:相比较宏有以下优点。
1.使用宏,无法进行调试,内联函数可以。
2.使用宏无法访问类的私有成员,内联函数可以。
b.2 inline的原理:
代码替代
b.3inline的使用:
让一个函数成为内联函数,隐式的为在类里定义函数,显式的则是在函数前加上inline关键字说明
b.4 什么时候使用内联函数:
如果执行函数代码的时间比处理函数调用机制的时间长,则节省的时间占比很小。若代码执行时间很短,则内联函数就可以节省函数调用的时间。
例:
inline bool IsNumericalString(string strExpr)
{
char* stop_str=NULL;
strtod(strExpr.c_str(), &stop_str);
if (*stop_str=='\n' || *stop_str=='\0')
return true;
else
return false;
}
//inline
string myexp1 = "a+0.5";
bool bnumerical1 = IsNumericalString(myexp1);
string myexp2 = "0.5+a";
bool bnumerical2 = IsNumericalString(myexp2);
string myexp3 = "0.5";
bool bnumerical3 = IsNumericalString(myexp3);
优点:
提高了程序的可读性,同时也方便进行修改;
提高程序的运行效率:
使用带参的宏定义既可完成函数调用的功能,又能避免函数的出栈与入栈操作,减少系统开销,提高运行效率;
缺点:
由于是直接嵌入的,所以代码可能相对多一点;
嵌套定义过多可能会影响程序的可读性,而且很容易出错;
对带参的宏而言,由于是直接替换,并不会检查参数是否合法,存在安全隐患。
不能debug。
//macro
#define MYDELETE(ptr) \
delete ptr;\
ptr = NULL;
//macro
int* mymacro1 = new int;
if (mymacro1!=NULL)
{
MYDELETE(mymacro1);
}
b.内联函数:
C++增加了内联函数(inline),实现起来比带参数的宏更方便,这样的宏在C++中已经很少使用了。
b.1优点:相比较宏有以下优点。
1.使用宏,无法进行调试,内联函数可以。
2.使用宏无法访问类的私有成员,内联函数可以。
b.2 inline的原理:
代码替代
b.3inline的使用:
让一个函数成为内联函数,隐式的为在类里定义函数,显式的则是在函数前加上inline关键字说明
b.4 什么时候使用内联函数:
如果执行函数代码的时间比处理函数调用机制的时间长,则节省的时间占比很小。若代码执行时间很短,则内联函数就可以节省函数调用的时间。
例:
inline bool IsNumericalString(string strExpr)
{
char* stop_str=NULL;
strtod(strExpr.c_str(), &stop_str);
if (*stop_str=='\n' || *stop_str=='\0')
return true;
else
return false;
}
//inline
string myexp1 = "a+0.5";
bool bnumerical1 = IsNumericalString(myexp1);
string myexp2 = "0.5+a";
bool bnumerical2 = IsNumericalString(myexp2);
string myexp3 = "0.5";
bool bnumerical3 = IsNumericalString(myexp3);
相关文章推荐
- 【菜鸟C++学习笔记】11.内联函数与const成员函数
- [C++基础]宏定义、内联函数、普通函数的区别
- C++ 学习笔记(6)函数、局部静态对象、重载函数、内联函数、constexpr函数、调试帮助、函数匹配、函数指针
- [C++学习笔记]--内联函数、函数重载、函数defualt参数
- C++入门学习:内联函数、函数的默认参数和占位参数
- [C++再学习系列] 虚函数的4条规则
- C++学习笔记之函数如何返回字符串(char型)
- [C++再学习系列] C++编译器的函数编译流程
- [C++]实验四:掌握内联函数的使用、参数个数不确定的函数的设计...
- 通过例子学习Lua(6)--C/C++中用Lua函数
- Effective C++学习5 条款05:了解C++默默编写并调用了哪些函数
- 通过例子学习Lua(6) ---- C/C++中用Lua函数(转)
- c/c++ 学习-open 函数
- 我自己学习C++编写的常用函数,类,模版 最近修改日期:2008年3月26日
- 通过例子学习Lua(6)--C/C++中用Lua函数
- c++学习笔记--虚函数和多态的重新认识
- C++成员函数指针的应用(学习收录)
- c++入门学习(函数模板)
- C++学习笔记(12)——多态与虚函数
- [C++再学习系列] 函数声明与STL容器构造