您的位置:首页 > 编程语言 > C语言/C++

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: