1. 程式人生 > >C++ 內聯函數

C++ 內聯函數

c++ inline 內聯函數

內聯函數和普通函數的區別:

普通函數在內存上只有一份,任何地方在調用她的時候分3步:

①:找出這個函數

②:執行此內聯函數

③:返回結果(可以是void),結束此函數,繼續執行此函數下面的代碼


但是內聯函數的調用步驟和不同函數是以一樣的 , 因為他在編譯的時候就不一樣:

如何編譯:

如果此函數是內聯函數,那麽在編譯的時候,只要是此函數被調用的地方,編譯器都會copy一份此函數放入這個地方。所以,內聯函數的執行,就沒有不同函數那麽多的步驟,直接就執行了。

這樣的好處是效率是比較高的,調用的地方多了 , 那麽copy的次數也多,那樣占用的內存也多。


來一個簡單的內聯:

#include <iostream>
using namespace std;
inline void fun1()
{
    cout << "這是內聯函數" << endl;
}
int main()
{
    fun1();
    return 0;
}

解析:

申明內聯函數需要用到關鍵字 : inline

另外需要註意的地方:

①:函數申明(有申明)以及其實現都需要使用inline關鍵字

#include <iostream>
using namespace std;
inline void fun1();
inline void fun1()
{
    cout << "這是內聯函數" << endl;
}
int main()
{
    fun1();
    return 0;
}

②:類內定義-類外實現都需要使用inline關鍵字

#include <iostream>
using namespace std;
class InlineC
{
public:
    inline void fun();
};
inline void InlineC::fun()
{
    cout << "這是內聯函數" << endl;
}
int main()
{
    InlineC *in = new InlineC;
    in->fun();
    delete in;
    return 0;
}


內聯函數和宏相似,都是copy,但是他比宏要安全

舉個例子:

#include <iostream>
using namespace std;
#define SUM(x) x*x
class InlineC
{
public:
    inline void fun();
};
inline void InlineC::fun()
{
    cout << "這是內聯函數" << endl;
}
int main()
{
    InlineC *in = new InlineC;
    in->fun();
    delete in;
    cout << "--------------------------------------" << endl;
    cout << SUM(1+3) << endl;
    return 0;
}

結果:

技術分享

並沒有得到結果 16 。

宏的嚴謹性沒inline高。


最後 , 一個默認 : 把inline的申明及實現寫在head裏面。

本文出自 “Better_Power_Wisdom” 博客,請務必保留此出處http://aonaufly.blog.51cto.com/3554853/1925645

C++ 內聯函數