Blog ブログ

C++03 と C++11 のコードを比較すると見やすくて便利だった!!

皆様こんにちは
4月に入社致しました、新人プログラマの山口と申します。
右も左も分からない未熟者ですが、先輩方に迷惑をかけながら成長しております。

さて、今回は C++11 の機能についてということでみなさん「もう知ってるよ」と
言われるかもしれないですが、ここ最近 C++11 でプログラムしているので
復習とまだ私が勉強できていないところを勉強しつつというのを兼ねて紹介していきたいと思います。
C++11の機能だけ知っててもだめだよと先輩に言われたので機能がなかった頃はどうしていたのか、
というのも調べてC++03のコードも書いてみました。

  • auto(型推論)

    はじめは、型推論です。
    とてもお世話になってます。以前は明示的に変数を宣言しないといけなかったものがauto を使うことによって省略できるというものです。
    decltype は具体的な型名を指定する代わりに式から型を取得できるものです。
    コンパイラさんありがとうございます。

    • enum Class
    enum に class(structでも可) を付けてスコープが付けられるようになりました。
    以前はスコープがなかったので定数を扱うのが少々分かりづらかったです。
    しかし、スコープが付くことで何の定数なのかわかりやすくすることができます。
    そして、enum に使う型も指定をすることができます。
    • 初期化リスト
    C++11から、 std::initializer_list を用いることにより初期化リストを
    引数として受け取ることができるようになりました。
    これによりクラスが初期化リストコンストラクタ
    TypeName(std::initializer_list<SomeType>) を持つような場合に
    優先して適用されます。

    • 範囲に基づく for ループ
    begin() と end() を持つ標準ライブラリのコンテナのループを書くのが簡単になりました。
    以前は begin() や end() を for ループの中に記述しないと
    いけなかったものが今回記述しなくてもよくなりました。
    機能が実装される前のコードも書いてみましたが
    autoも使いrange-based-forを使うとコードがすっきりしました。
    • ラムダ関数とラムダ式
     ラムダ(lambda)とは簡易的な関数オブジェクトを定義するための機能です。
    戻り値の型を明示的に指定することもできますが省略することもできます。
    省略した場合 return 式から戻り値の型を推論されます。
    • まとめ
    まだ全ての機能を理解するほど勉強できてないですが、こつこつ勉強したいと思います。
    紹介したものはほんの少しです、他にも nullptr,  コンパイラが生成する関数への default/delete 指定など
    まだまだ色々な機能があります。
    C++03のコードを調べて書いてみましたが、コードがだらだらと長くなってしまい、見難いというのが感想でした。
    先輩の方に聞くとまだ時々C++03で書かれたコードを見るという話を聞き、びっくりしましたが、そういうコードと出会ったときに

    戸惑わないようにC++03も勉強しないといけないと感じました。

    採用情報

    クラウドクリエイティブスタジオではエンジニアの方を絶賛募集中です。
    本気で面白いゲームを一緒に作りたい方一緒に作りませんか?