C++のインライン関数inline

1457 ワード

c++では、頻繁に呼び出されるいくつかの小さな関数がスタック空間を大量に消費したり、スタックメモリと呼ばれる問題を解決するために、インライン修飾子が特に導入され、インライン関数として表される.ここまで言うと、スタック空間とは何か分からない人が多いかもしれませんが、スタック空間とはプログラムを配置するローカルデータ、すなわち関数内のデータのメモリ空間を指し、システムの下ではスタック空間は限られており、頻繁に大量に使用するとスタック空間の不足によるプログラムエラーの問題を引き起こします.関数のデッドサイクル再帰呼び出しの最終結果は、スタックメモリ空間が枯渇することです.次に例を示します.
#include <iostream>
#include <string>
using namespace std;
 
inline string dbtest(int a); //       inline :    
 
 
void main() {
    for (int i=1;i<=10;i++)
    {
        cout << i << ":" << dbtest(i) << endl;
    }
    cin.get();
 
}
 
string dbtest(int a)//      inline,    inline       
{
    return (a%2>0)?" ":" ";
 
}

 
inlineの原理:
上の例は標準的なインライン関数の使い方で、inline修飾を使うメリットは表面的には見えませんが、内部の仕事はforループの内部ごとにdbtest(i)を呼び出す場所をすべて変えたことです(i%2>0)?「奇」:「偶」を使用すると、スタックメモリの重複オープンに伴う関数の頻繁な呼び出しの消費を回避できます.
 
inlineの制限:ここまで多くの人が聞くかもしれませんが、inlineがこんなに良い以上、いわゆる関数をinlineと宣言したほうがいいです.ええ、この問題は注意しなければなりません.inlineの使用は制限されています.inlineは関数体内のコードの簡単な関数にしか適していません.複雑な構造制御文、例えばwhile switchは含まれません.また、インライン関数自体は直接再帰関数ではありません(自分の内部で自分の関数を呼び出すこともできます).
inline vs.#define:ここではc言語で広く使われている#define文についてお話ししなければなりません.はい、defineは確かにinlineのこれらの作業もできますが、defineは副作用を生じ、特に異なるタイプのパラメータによるエラーであり、inlineにはより強い制約性とコンパイラにより多くのエラーをチェックさせることができる特性があります.c++ではdefineの使用は推奨されません