zoukankan      html  css  js  c++  java
  • 内联函数

    ---恢复内容开始---

    1、C的效率

      在C中,保持效率的一个方法是使用宏(macro)。宏的实现是用预处理器而不是编译器。预处理器直接用宏代码代替宏调用,所以就没有参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN等的开销。

    2、C ++中宏存在的问题

      2.1 不是函数调用,隐藏了难以发现的错误。优先级等等问题

    #define FLOOR(x,b) x>=b?0:1
    
    if(FLOOR(a&0x0F,0x07))  //……
    
    if(a&0x0F>=0x07?0:1)
    
    #define FLOOR(x,b) ((x)>=(b)?0:1)

      2.2 预处理器不允许访问类的成员数据。这就意味着预处理器宏不能用作类的成员函数。C++引入内联函数。

    3、内联函数

         内联函数在适当的地方像宏一样展开。所以不需要函数的开销。

      3.1、类内部的内联函数

        通常必须在函数定义前面放一个inline关键字,但这在类内部定义内联函数时并不是必须的。任何在类内部定义的函数自动地成为内联函数。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Point{
    int i, j, k;
    public:
    Point():i(0),j(0),k(0){}
    
    Point(int ii, int jj, int kk): i(ii), j(jj), k(kk)
    {
    }
    
    void print(const string& msg = "") const {
    if(msg.size() != 0) cout<<msg<<endl;
    cout<<"i = "<<i<<", "<<"j = "<<j<<", "<<"k = "<<k<<endl;
    }
    };
    
    int main()
    {
    Point p,q(1,2,3);
    p.print("value of p ");
    q.print("value of q ");
    
    }

    两个构造函数和print 函数都默认为内联函数。

    ---恢复内容结束---

  • 相关阅读:
    js实现观察者模式
    磁盘阵列操作实战
    淘宝知名工程师
    Java线程并发控制基础知识
    java多线程总结
    NIO系列1:框架拆解
    Java NIO 系列教程
    Java NIO系列教程(三-十二) Buffer
    Java NIO系列教程(二) Channel
    Java NIO系列教程(一) Java NIO 概述
  • 原文地址:https://www.cnblogs.com/wiessharling/p/2985282.html
Copyright © 2011-2022 走看看