精华内容
下载资源
问答
  • 1:引入内联函数的主要目的是,用它替代C语言中表达形式的宏定义来解决程序中函数调用的效率问题。在C语言里可以使用如下的宏定义: #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2) 这种宏定义在...

    预处理、const、static与sizeof-为什么要引入内联函数

    1:引入内联函数的主要目的是,用它替代C语言中表达形式的宏定义来解决程序中函数调用的效率问题。在C语言里可以使用如下的宏定义:

    #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)

        这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈、代码生成等一系列的操作, 因此效率很。这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换。因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处。另外,它的返回值也不能被强制转换为可转换的合适类型,这样,它的使用就存在着一系列的隐患和局限性。

        另外,在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。

        inline推出的目的,也正式为了取代这种表达式形式的宏定义。它消除了它的缺点,同时又很好地继承了它的优点。

    posted @ 2017-10-08 16:45 一串字符串 阅读(...) 评论(...) 编辑 收藏

    展开全文
  • 内联函数

    2019-09-27 12:38:35
    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子: #define ABS(x) ((x)>0? (x):-(x)) 当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的...
     

    (1)什么是内联函数?
    内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。

    (2)为什么要引入内联函数?
    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子:
    #define ABS(x) ((x)>0? (x):-(x))
    当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义很容易产生二意性。
      
    我们可以看到宏有一些难以避免的问题,怎么解决呢?前面我们已经尽力替换了。

    下面我们用内联函数来解决这些问题。

    (3)为什么inline能取代宏?
    1、 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
    2、 很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。
    3、 inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。

    (4)内联函数和宏的区别?
    内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数的宏定义进行下比较,它们的代码效率是一样,但是内联欢函数要优于宏定义,因为内联函数遵循的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,比较方便。

    (5)什么时候用内联函数?
    内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成
    员函数定义成内联函数的话,将会获得比较好的效率。
    Class A
    {
    Private:
    int nTest;
     Public:
    int readtest() { return nTest;}
    void settest(int I) { nTest=I; }
    }

    (6)如何使用内联函数?
    我们可以用inline来定义内联函数。
    inline int A (int x) { return 2*x; }
    不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。

    (7)内联函数的优缺点?
    我们可以把它作为一般的函数一样调用,但是由于内联函数在需要的时候,会像宏一样展开,所以执行速度确比一般函数的执行速度要快。当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。(换句话说就是,你使用内联函数,只不过是向编译器提出一个申请,编译器可以拒绝你的申请)这样,内联函数就和普通函数执行效率一样了。

    (8)如何禁止函数进行内联?
    如果使用VC++,可以使用/Ob命令行参数。当然,也可以在程序中使用 #pragma auto_inline达到相同的目的。

    (9)注意事项:
    1.在内联函数内不允许用循环语句和开关语句。
    2.内联函数的定义必须出现在内联函数第一次被调用之前。

    转载于:https://www.cnblogs.com/OceanDeep/archive/2011/10/05/2284580.html

    展开全文
  • 当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子:#define ABS(x) ((x)>0? (x):-(x))当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义很...

    (1)什么是内联函数?

    内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。

    (2)为什么要引入内联函数?

    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子:

    #define ABS(x) ((x)>0? (x):-(x))

    当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义很容易产生二意性。

    我们可以看到宏有一些难以避免的问题,怎么解决呢?前面我们已经尽力替换了。

    下面我们用内联函数来解决这些问题。

    (3)为什么inline能取代宏?

    1、 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。

    2、 很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。

    3、 inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。

    (4)内联函数和宏的区别?

    内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数的宏定义进行下比较,它们的代码效率是一样,但是内联欢函数要优于宏定义,因为内联函数遵循的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,比较方便。

    (5)什么时候用内联函数?

    内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成

    员函数定义成内联函数的话,将会获得比较好的效率。

    Class A

    {

    Private:

    int nTest;

    Public:

    int readtest() { return nTest;}

    void settest(int I) { nTest=I; }

    }

    (6)如何使用内联函数?

    我们可以用inline来定义内联函数。

    inline int A (int x) { return 2*x; }

    不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。

    (7)内联函数的优缺点?

    我们可以把它作为一般的函数一样调用,但是由于内联函数在需要的时候,会像宏一样展开,所以执行速度确比一般函数的执行速度要快。当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。(换句话说就是,你使用内联函数,只不过是向编译器提出一个申请,编译器可以拒绝你的申请)这样,内联函数就和普通函数执行效率一样了。

    (8)如何禁止函数进行内联?

    如果使用VC++,可以使用/Ob命令行参数。当然,也可以在程序中使用 #pragma auto_inline达到相同的目的。

    (9)注意事项:

    1.在内联函数内不允许用循环语句和开关语句。

    2.内联函数的定义必须出现在内联函数第一次被调用之前。

    展开全文
  • 当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到...

    (1)什么是内联函数? 内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。

    (2)为什么要引入内联函数? 当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。另外,前面我们讲到了宏,里面有这么一个例子:#define ABS(x) ((x)>0? (x):-(x)),当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义很容易产生二意性。我们可以看到宏有一些难以避免的问题,怎么解决呢?前面我们已经尽力替换了。 下面我们用内联函数来解决这些问题。

    (3)为什么inline能取代宏? 1、 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。  2、 很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。 3、 inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。

    (4)内联函数和宏的区别? 内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数的宏定义进行下比较,它们的代码效率是一样,但是内联欢函数要优于宏定义,因为内联函数遵循的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,比较方便。 

    (5)什么时候用内联函数? 内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成 员函数定义成内联函数的话,将会获得比较好的效率。 Class A { Private: int nTest;  Public: int readtest() { return nTest;} void settest(int I) { nTest=I; } }

    (6)如何使用内联函数? 我们可以用inline来定义内联函数。 inline int A (int x) { return 2*x; } 不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。

    (7)内联函数的优缺点? 我们可以把它作为一般的函数一样调用,但是由于内联函数在需要的时候,会像宏一样展开,所以执行速度确比一般函数的执行速度要快。当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。(换句话说就是,你使用内联函数,只不过是向编译器提出一个申请,编译器可以拒绝你的申请)这样,内联函数就和普通函数执行效率一样了。

    (8)如何禁止函数进行内联? 如果使用VC++,可以使用/Ob命令行参数。当然,也可以在程序中使用 #pragma auto_inline达到相同的目的。

    (9)注意事项: 1.在内联函数内不允许用循环语句和开关语句。 2.内联函数的定义必须出现在内联函数第一次被调用之前。

    展开全文
  • 关于c++的内联函数

    2013-09-24 22:16:19
    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子: #define ABS(x) ((x)>0? (x):-(x)) 当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义...
  • C 内联函数

    2013-07-22 17:27:47
    (1)什么是内联函数? 内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作...当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子: #
  • c++内联函数

    2013-12-28 08:48:19
    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子: #define ABS(x) ((x)>0? (x):-(x)) 当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义...
  • C++内联函数

    2013-11-22 16:34:56
    当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子: #define ABS(x) ((x)>0? (x):-(x)) 当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

引入内联函数的主要目的