LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【C++】インライン関数

f:id:AtsuyaKoike:20190524095847p:plain:w300

インライン関数の特徴

  • メリット
    • 関数の呼び出しと終了時に伴うオーバーヘッドが発生しないことから、通常の関数よりも早く実行できる。
  • デメリット
    • ファイルサイズが大きくなる。
    • ループ、goto、switchを含めることができない
    • 再帰してはいけない
  • 関数定義の前にinlineと記述するだけでインライン関数となる。
  • 関数の規模が大きい時など、コンパイラが要求を実行できない場合は通常の関数としてコンパイルされる。
  • インライン関数もオーバーロードすることができる
#include <iostream>
using namespace std;

inline int even( int x ) {
    return !(x%2);
}

int main() {
    if( even(10) ) cout << "10は偶数です\n";
    if( even(11) ) cout << "11は偶数です\n";
    return 0;
}
$ g++ -o study67 study67.cpp 
$ ./study67
10は偶数です




自動インライン化

#include <iostream>

using namespace std;

class samp {
    int i, j;
public:
    samp( int a, int b ) {
        i = a;
        j = b;
    }
    int divisible() {
        return (i/j);
    }
};

int main() {
    samp sp( 20, 5 );

    cout << sp.divisible() << endl;
}
$ g++ -o study72 study72.cpp 
$ ./study72 
4
  • ただし、入出力演算子はそもそも遅いので恩恵はあまり得られない
  • 短くなるため、恩恵がない場合でもクラスの中に書くことは多い




引用・参考はこちら

f:id:AtsuyaKoike:20190524100759j:plain:w200
独習C++ 第4版 https://www.amazon.co.jp/dp/4798119768