近年に置いてC/C++を学ぶ利点を考えてみる

最近は様々な言語があり、敢えてC/C++を学ばなくともプログラミングの世界に入っていけるようになっています。ここで現時点においてC/C++を学ぶべきなのか、利点を考えてみたいと思います。

ポインタ

ポインタはC/C++を学習するに当たって多くの人が最初に遭遇する障壁みたいなものなのですが、これがC/C++の難解さと強力さを醸し出している要素です。

例えばC#でListクラスにおいて要素を取り除く、Removeメソッドがありますが、C#ではlist.Remove(3)などとすると一致する最初の要素が取り除かれます。(ちなみにこれはListの場合です。C#ではある数値のリストの最初の出現箇所を一行で取り除ける、ということに注目して下さい。)

これをC/C++で実現しようとすると次のような処理が必要になります。

前提:各ノードは次のようなデータ構造になっています。

struct node {
  int value;
  struct node *next;
};

これは数値と次のノードへのリンクを格納した連結リストです。valueに値が格納され、次のノードへのリンクはnextに指定されます。

  1. 最初のデータノードを読み込み数値を比較する
  2. 該当しなければ次のノードに移る
  3. 上記二手順を該当があるまで繰り返す(次ノードがNULL判定であれば停止)
  4. 該当するノードの前のノードのアドレスを取得(もしくは上記に辿る際に予め前ノードを別値に記憶させておく)
  5. 該当するノードの次のノードのアドレスを取得(こちらは該当ノードの次のノードへのリンク、nextがあるので敢えて別途取得する必要はなし)
  6. 該当するノードの前のノードのnextに指定されているアドレスを該当するノードの次のノードのアドレスを指定
  7. 該当するノードのメモリを解放

という手順になります。

作成者: Hideki Saito

ゲーム業界に15年ほど携わり、現在は米国任天堂においてローカライゼーションエンジニアと翻訳技術の開発・保守などに携わる。

%d人のブロガーが「いいね」をつけました。