These search terms have been highlighted:[c++]
2009-01-26
すぐ忘れるので,メモ. 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 が含まれていることがわかるはずだ.