ようなコードは推奨されません。program.(異なるプログラム中でbeforeメンバが同じ結果を返すという保障はないし、同じプログラムを2回走らせたときでさえその保障はない。以外のメンバは使わないことを推奨します。†C++にはインライン関数というものがあります。簡単に言うと、「(コンパイラが)関数のコードを、その関数を呼び出した場所にそのまま貼り付ける」といった感じです。キーワードを付けます。0;}これをコンパイルすると、次のコードをコンパイルしたのと(ほぼ)同じアセンブリコードが生成されます。呼び出した位置に展開された形になり、これを「インライン展開」と呼びます。~インライン関数のメリット~通常の関数を使うよりも高速に動作する最初にも書いたように、通常の関数呼び出しを行うと、元の関数と別の場所(場所とは生成された実行ファイル上の位置)にあるコードへジャンプします。このジャンプを行う際に、現在のレジスタの内容を保存したり、関数の処理が終わって戻ってくる場所を記憶したり、とジャンプの前処理を行う必要があり、これに時間がかかります。インライン関数を使うと上に書いたように関数のコードが呼び出し元にそのまま展開されるので、ジャンプの処理は必要なく、より高速に動作します。~インライン関数のデメリット~コードが肥大化する通常の関数呼び出しがなぜ時間のかかる処理をしてまでジャンプをするかと言うと、それは「コードを共有するため」です。呼び出されようが同じ場所へジャンプすればよいのです。呼び出されれば同じコードが100箇所に生成されます。このためコードが肥大化してしまうというデメリットがあります。~インライン関数を使う上での注意~inlineを指定した関数が必ずインライン展開されるとは限らないコンパイラがインライン展開をするに値する(メリットの方が大きい)と判断しなければ、inlineを指定してもインライン展開されないことがあります。指定することで強制的にインライン展開させることができます。Borlandのコンパイラにはこのような独自機能はないようです。いったことができません。†テンプレート関数とは、使う側の立場から見れば「引数、返り値の型が決まっていない関数」です。xの絶対値を返す関数を作りたいと考えます。すると、「引数、返り値ともにdouble(数値型で一番ビット幅が大きい)で定義して、キャストして使う」、「関数のオーバーロードを使う」などの方法がうかびます。long(C99で追加)などdouble以上のビット幅をもつ整数型に対応できません。後者は使いたい型すべてについて同じコードを何回も書かねばなりません。そこで登場するのがテンプレート関数です。longにも適用できます。~テンプレート関数の定義方法~まず具体例を見て、それから解説します。xの絶対値を返すテンプレート関数は次のように定義します。