C++ 行內函數



什麼是 C++ 行內函數

C++ inline 函式是一個強大的概念,通常與類一起使用。如果一個函式是內聯的,編譯器會在編譯時將該函式程式碼的副本放置在每個呼叫該函式的位置。

對行內函數的任何更改都可能需要重新編譯該函式的所有客戶端,因為編譯器需要再次替換所有程式碼,否則它將繼續使用舊的功能。

定義行內函數

要定義行內函數,請在函式名前放置關鍵字 inline,並在進行任何對函式的呼叫之前定義該函式。如果定義的函式超過一行,編譯器可以忽略內聯限定符。

類定義中的函式定義是行內函數定義,即使沒有使用 inline 說明符。

示例

以下是一個示例,它使用行內函數返回兩個數字中的最大值:

#include <iostream>
 
using namespace std;

inline int Max(int x, int y) {
   return (x > y)? x : y;
}

// Main function for the program
int main() {
   cout << "Max (20,10): " << Max(20,10) << endl;
   cout << "Max (0,200): " << Max(0,200) << endl;
   cout << "Max (100,1010): " << Max(100,1010) << endl;
   
   return 0;
}

編譯並執行上述程式碼後,將產生以下結果:

Max (20,10): 20
Max (0,200): 200
Max (100,1010): 1010

類中的行內函數

預設情況下,在類內定義的所有函式都是隱式內聯的。如果要顯式地將函式定義為行內函數,則必須在類內宣告函式,並在類外編寫其定義。inline 關鍵字用於類宣告之外的函式定義。

示例

在下面的示例中,我們定義了一個帶有類的行內函數:

#include <iostream>
using namespace std;

class Number {
private:
    int num1;
    int num2;

public:
    // Function to set the values
    void setValues(int a, int b);

    // Function to print the values
    void printValues();

    // Inline function to add the two numbers
    inline int addNumbers();
};

// Member function definitions
void Number::setValues(int a, int b) {
    num1 = a;
    num2 = b;
}

void Number::printValues() {
    cout << "Number 1: " << num1 << ", Number 2: " << num2 << endl;
}

// Inline function definition
inline int Number::addNumbers() {
    return num1 + num2;
}

int main() {
    // Create an object
    Number n;

    // Set the values
    n.setValues(10, 20);

    // Print the values
    n.printValues();

    // Add the numbers and print the result
    int sum = n.addNumbers();
    cout << "Sum of the numbers: " << sum << endl;

    return 0;
}

行內函數的優點

以下是使用行內函數的優點:

  • 對於行內函數,不會發生函式呼叫開銷。
  • 行內函數節省了在呼叫函式時將變數壓入和彈出堆疊的開銷。
  • 行內函數節省了從函式返回的開銷。
  • 建立行內函數時,編譯器可能會對函式體執行特定於上下文的最佳化。對於普通函式,不會執行這種最佳化。
  • 使用小型行內函數可能對嵌入式系統有用,因為內聯可以產生比函式呼叫序言和返回更少的程式碼。

行內函數的缺點

行內函數的一些缺點如下:

  • 當我們使用行內函數時,程式碼的大小會增加,因為編譯器用行內函數程式碼替換每個函式呼叫。
  • 大型程式碼需要更多記憶體和時間來編譯程式碼。
  • 編譯過程會變慢,因為編譯器會在函式呼叫的位置評估和替換函式程式碼。
  • 在某些情況下,程式的效能可能會降低。
  • 根據函式程式碼的複雜性,編譯器可能會忽略 inline 關鍵字。因此,行內函數的應用是有限的。

行內函數的一些缺點如下:

cpp_classes_objects.htm
廣告