inline 関数を使用場所より後で定義してもいいか?
すぐ忘れるので,メモ. inline 関数は,先行宣言しておくことで,定義が使用場所より後にある場合でも問題なく使える.
補足.
例えば,
#include <iostream> using namespace std; inline void print_hoge(void); // 先行宣言 int main(int argc, char**argv) { print_hoge(); // 使用場所 return 0; } inline void print_hoge(void) // 定義 { cout<<"hoge"<<endl; }
こんな例を考える. inline 関数 print_hoge の定義は,使用場所よりも後にあるが,先行宣言が使用場所よりも前にあるので,問題なく使える.
一応, inline 化されているか確認しておこう. g++ で -O2 をつけて最適化し, nm でシンボルテーブルを覗く:
g++ post-inline-def.cpp -O2 nm a.out | less
print_hoge がないことがわかる.これでも信じられない人は,上のサンプルプログラムから inline を除いてコンパイルしてみよう. nm を使えば,シンボルテーブルに print_hoge が含まれていることがわかるはずだ.