C++11を使い始める理由9つ


コードが正常に動作し、よく機能している場合は、なぜC++11を使用するのか知りたいかもしれません.もちろん、最新の技術を使うのはいい感じですが、実際には価値がありますか? 
私から見れば、答えは間違いなく肯定的だ.パフォーマンスのメリットと開発効率の2つに分類される9つの理由を以下に示します.
パフォーマンスのメリット
理由1:move語義(move semantics).簡単に言えば、レプリケーションを最適化する方法です.レプリケーションは明らかに無駄です.一時的なstringオブジェクトからコンテンツをコピーすると、簡単なコピーポインタから文字バッファへのコピーは、新しいバッファを作成してからコピーするよりもずっと効率的になります.彼が仕事ができるのは、ソースオブジェクトが範囲を超えているからだ.
しかしながら、これまでC++は、ソースオブジェクトが一時オブジェクトであるか否かを判断するメカニズムはなかった.moveの意味は、レプリケーション操作に加えて、moveコンストラクション関数(move constructor)とmove付与演算(move assignment)子を持つことで、このメカニズムを提供することができます.
知ってる?Visual Studio 2010でstringやvectorなどの標準ライブラリのクラスを使用すると、moveの意味がサポートされます.これにより、不要なレプリケーションを防止し、パフォーマンスを向上させることができます.
クラスでmoveの意味を実装することで、STLコンテナに格納する場合など、追加のパフォーマンス向上を得ることができます.また、moveの意味は、コンストラクション関数だけでなく、vectorのpush_backメソッドなどのメソッドにも適用できます.
理由2:is_floating_pointなどのカテゴリ属性(type traits)とテンプレートメタプログラミング(template metaprogramming、enable_if templateなど)を使用すると、特定のタイプのテンプレートをカスタマイズでき、最適化が可能になります.
理由3:ハッシュ表現はすでに標準的に実現されており、より迅速な挿入、削除、検索を提供し、これは大量のデータを処理する際に役立つ.unorderedを自由に使えますmap, unordered_multimap, unordered_setとunordered_Multisetといういくつかのデータ構造です.
能率を高める
効率の向上はコード性能だけでなく,開発時間も貴重である.C++11は、コードをより短く、より明確に、より読みやすくすることができ、より効率的になります.
理由4:autoキーワードは自動的にタイプを推定できるので、次のコード:
vector<vector<MyType>>::const_iterator it = v.begin()

 
簡単に書けます
auto it = v.cbegin()

一部の人は、それはタイプの情報を隠していると言っていますが、私から見れば、それは弊害よりも利益が大きいと言っています.それは視覚の混載を減らし、コードの行為を示しているからです.そして、私は多くの字を打つことを少なくすることができます.
理由5:Lambda式は匿名メソッドオブジェクト(実際には閉パッケージ)を定義する方法を提供し,これはコードがより線形で規則的である.これはSTLアルゴリズムと組み合わせて使用する場合に便利です.
bool is_fuel_level_safe()
{
    return all_of(_tanks.begin(), _tanks.end(), 
        [this](Tank& t) { return t.fuel_level() > _min_fuel_level; });
}

理由6:問題のあるauto_を新しいスマートポインタ(smart pointer)で置き換えたptrでは、メモリの解放を心配せずに、関連する解放メモリのコードを削除できます.これにより、コードがより明確になり、メモリの漏洩とメモリの漏洩を検索する時間がなくなります.
理由7:方法をfirst class objectとして非常に強力な特性であり、コードをより柔軟で汎用的にすることができます.C++のstd::functionはこの方面の機能を提供した.方法は、任意の呼び出し可能なもの-関数ポインタ、シミュレーション関数(functor)、lambda式などを包装し、伝達することを提供する.
理由8:override、finalキーワード、nullptrなど、他にも小さな機能がたくさんあります.コードの意図をより明確にします.私にとって、視覚的な混乱を減らし、コードの中で私の意図をより明確に表現できることは、より楽しく、より効率的であることを意味します.
もう1つの開発効率の側面はエラー検出である.エラーが実行中に発生した場合は、少なくともソフトウェアを実行する必要があり、一連のステップでエラーを再現する必要があります.これは時間がかかります.
C++11は、コードを実行する前に、前提条件を確認し、可能なタイミングでエラーをキャプチャする方法を提供します.これが理由です.
これは静的アサーション(static_assert)とカテゴリ属性テンプレートによって実現される.この方法のもう一つの利点は、実行時のオーバーヘッドを必要とせず、パフォーマンスの損失がないことです.
今からC++11をマスターします
C++11規格では、上述した以外にも、より多くの変更と新しい機能があり、本全体の数で説明する必要があります.しかし、私はそれらがあなたが時間をかけて勉強する価値があると信じています.これまで効率を高めるのに費やした時間を省くことができます.多くの主流のコンパイラはすでにC++11のいくつかの標準をサポートし始めた.何を待ってるの?始めよう!
注:多くの名詞は中国語に訳したほうが英語を読むほうが気持ちがいいと思って、中国語の後ろの括弧に訳して元の英語の単を注釈しました