1. 程式人生 > >【C++】詳解行內函數(inline)

【C++】詳解行內函數(inline)

前言

最近在學習C++的時候,行內函數讓我很迷糊,上網查閱了很多的資料,發現裡邊解釋的很抽象,最後在B站裡將行內函數理解了!如果你想要搞懂行內函數,那麼一定要好好看看此篇部落格!

1、什麼是行內函數

行內函數(有時稱作線上函式或編譯時期展開函式)是一種程式語言結構,用來建議編譯器對一些特殊函式進行內聯擴充套件(有時稱作線上擴充套件)。

以上是官方定義,其實行內函數就是為了解決我們的程式中多次呼叫相同函式浪費資源的一種解決辦法,它的出現讓我們計算機的效率提高。具體怎麼提高一會給大家展示程式碼!

2、行內函數的基本概念

(1)使用關鍵字inline說明的函式稱為行內函數
(2)行內函數必須在程式中第一次呼叫此函式語句出現之前定義;
(3)在c++中,除具有迴圈語句、switch語句的函式不能說明為行內函數外,其它函式都可以說明為行內函數
(4)使用行內函數可以提高程式碼的執行速度,但是如果函式體語句多,則會增加程式程式碼的大小!

3、通過程式碼解釋

由於編譯器必須知道行內函數的函式體,才能進行替換,因此行內函數必須在程式中第一次呼叫此函式的語句之前定義!

#include <iostream>
#include<cmath>
using mamespace std;

//定義行內函數distance
inlline double distance(double a,double b){
	return sqrt(a*a+b*b);
}

int main(){
	double k=6,m=9;
	cout << distance(k,m)<<endl; //行內函數,它與下面的語句等價!

   cout<<sqrt(k*k+m*m)<<endl;//編譯後的樣子

}

上面的程式碼中如果沒有inline(行內函數)關鍵字,那麼我們在main函式中就要呼叫distance,然後在返回來sqrt(k* k+m* m);我們都知道程式在呼叫函式的時候浪費時間與資源!而用了行內函數我們在編譯後無需呼叫,直接就是
cout<<sqrt(kk+mm)<<endl;提高了效率!

當我們的程式中多次呼叫這個函式的時候,我們的程式用一次就要呼叫一次,行內函數的出現讓我們只需要在程式編譯的時候編譯一次就好了!

綜上所述:
如果行內函數的方法體過長,那麼編譯後會讓我們的程式碼變的非常長,因此行內函數只使用程式多次呼叫且函式體程式碼較短的情況!

4、預設情況下的行內函數

如果我們在宣告類的時候,在類體中給出了成員函式的定義(不是宣告),則預設為行內函數,例如當我們在類中

#include <iostream>
using mamespace std;
class Point{
    private:
    	int x,y;
    public:
    	void Setxy(int a, int b)
    	{x=a;y=b}

        void Move(int a,intb)
        {x=x+a;y=y+b}	
};

上述程式碼中Setxy與Move預設為行內函數!