続・プログラミング言語 ++C ?

C言語には、++演算子と–演算子なる物があります。

でもってこの演算子ですが、i++; と ++i; の2つの書式が存在します。

と言う話の続きです。

では、この2つ何が違うかというと、

int i = 1;
int a = i++;

と書くと、aが1になり、iが2になります。

int i = 1;
int a = ++i;

と書くと、aもiも2になります。

という違いがあるのですが、C++言語の場合、話がもう少し複雑になります。

これの中身を、関数風に記述してみると、

i++; の場合…
int ++( int& i ){
  int tmp = i;
  i = i + 1;
  return tmp;
}

++i; の場合…
int ++( int& i ){
  i = i + 1;
  return i;
}

みたいな事が行われています。

少し分かりづらいですが、++i; の方がちょっとだけお得な気がしませんか?

class型の場合はもう少し複雑で、i++; の場合、tmpに代入するときとtmpをリターンするときに、コンストラクタとデストラクタが働くので、処理コストに差が出てしまいます。

でもって、アクションゲームとかだと、シーンに1000個単位のオブジェクトが存在していたりしてですね、こいつらをイテレータを使って順に実行していく際、こんな風に記述します。

for( itr = begin; itr != end; ++itr ) itr->Update();

間違って、++itr を itr++ としてしまうと、無駄なコンストラクタとデストラクタを1000個単位で実行してしまい、パフォーマンスに影響が出てしまうのです。

ということで、普段から ++i; 的な書き方を心がけましょう。

カテゴリー: 独り言   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>