C++11を使ってC++でプログラムを書いている時に特によく使っている機能を列挙します。プログラムの内容にも依存するので使わない人も多いかもしれませんが。C++11以前でも使えているのかもしれませんがそれを含めて何をよく使っているかを挙げます。

1. using
2. auto
3. ラムダ関数
4. nullptr
5. std::to_string()
です。

1のusing。使わなくてもtypedefを使えばいいのですが、何となくtypedef
を使うよりはわかりやすいことがあります。
例えば、
using INT = long long;
というように、= を使ってわかりやすいですが、typdefは右左が逆に
なりどっちだっけ?となっていしまいます。usingで指定した型のスコープもtypedefとは違い、method内だけ有効などということも可能だったと思います(普通使わないかも)。

2の、auto は、上記の long long なのか、int なのか迷っている場合で、int -> long long に変更とか、その逆の場合にはこのautoを使っていると、変更が少なくても楽です。 当然型変換がおきないような場合に元芸されますが、関数の引数で受けたデータをそのままの型で計算する場合には変更する必要がなくて楽です。

3のラムダ関数。 lambda式と言われているものです。 Cのqsortや、C++のstd::sort等では、比較のための関数を指定する必要があります(省略もできるけど)。この時に、関数を1つ用意する必要があるのですが、こんな関数はその1か所でしか使わないことが多いと思います。さらに複雑なこともあまりないので、ほぼ数行で済むようなことを新たな関数で名は無く、その中に埋め込めるというのは便利です。古くは LISP、最近だと、javaの1.7あたり?とか、swift等、lambda式を書けるのが流行っているような気がいます。

4.のnullptr。これは NULLでもあまり変わらないし、文字数も増えるので面倒というのもありますが、NULLを ポインタではなくて、0として扱っているのか、 pointerで nullとなっているのかが明確にできます。これはほぼ気持ちの問題だけであって 文字列の最後を NULL として、また 関数の戻り値で、 pointer の場合は nullptrとして記述するとわかりやすいと考えます。

5.のto_string。これは今までなかったのが不思議なくらいです。これだけは絶対につかうべきでしょう。普通だと、sprintfに、charの配列を指定し、その配列に読み取り、stringに変換するというのが作らなくても使えます。

以上が私自身が良く使うC++11の機能です。是非ご参考に。

関連記事

投稿者

 
ページ上部へ戻る