Cpp クラス インライン関数

提供:yonewiki
2022年9月26日 (月) 11:23時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「C++に戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス インライン関数</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

C++に戻る


本来の表記は「C++(Cpp) クラス インライン関数」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ クラス インライン関数になっています。

クラス インライン関数

 クラスの中の関数が、関数名からもあきらかで、簡単な動作の場合にはヘッダファイルの宣言自体にプログラムを記述してしまうという関数をインライン関数と呼んでいます。単純に宣言の時に関数の中身を書くのだけではダメで、戻り値の型を指定している前に inline というキーワードを添えて、記述するだけです。インライン関数を定義した箇所の末尾にセミコロンは必要ありません。関数記述をするときと同じような形式になっていれば良いです。簡単な関数をinline化するといいましたが、割かし長い処理もinlineに記述することは出来ます。こうなってしまうと、本来の役割とは言えないです。でも命令文毎に:を区切って使えばいくらでもプログラムを記述出来ます。もちろん改行してもいいです。


例えば、以下のような感じになります。


cpp (ClassInlineFunc.h )

class CInlineFunc{
private:

    int m_iSize;    

public:

    CInlineFunc();
    ~CInlineFunc();

   inline void iSize_Set(int iArgSize){ m_iSize = iArgSize; }
   inline int  iSize_Get(void){ return m_iSize; }

   inline void iSize_Increment(void){ m_iSize++; }

};


 単純に宣言と同時に書いて処理内容を記述できて楽だ!というそういうことだけが目的ではないです。簡単になるので、確かに楽な部分もあるかもしれませんが、処理速度にも関わってくる技術です。インライン関数にするとその処理が何回も呼び出されるほど、効果を発揮することがあります。なんども計算が発生するケースで考えれば、常に監視を続けるようんプログラムや、画像処理、3D空間処理、大規模な科学技術計算、音楽の波形処理や電波、電気磁気学計算、ビッグデータ統計処理、深い階層全体におよぶファイル処理、ドライブ全体スキャン処理とかですね。その中の単純で何度も繰り返す処理をinline化すると速くなります。


 ですがinlineと宣言しても、必ずしもスピードが速くなる領域にプログラムが構成されるとは限らないです。コンパイラによって、inlineの効果があるかどうかが判断されて、展開されます。コンパイラが判断する内容ともなると、自分ごときでは説明しきれない複雑なメカニズムになっているはずなので、その判断基準の個々の解説はできません。


 ネットでいろいろな処理速度比較の結果を見てみたが1.25倍からせいぜい10倍くらいまでかな。でも長時間処理の10倍ってなると1時間かかる処理が10時間になったりするのだから、この部分に気を使うだけでも、かなりプログラムの質があがる場合があります。1.25倍でも100分が125分だからね。25分あったら、ジャンピングニーパッドの練習が100回くらいできるよね。有意義だわ。


C++に戻る