C ++ 11を使用して変数パラメータと特性の原則のforeachの

書いたC ++ 11の機能は使用していますが、この何それは、とforeachステートメントは、他の言語に非常に似ています

関数は、コンパイル時、単一の戻り値の型で知られている必要があります;コンパイラは、ときにでなければならないものを文脈から把握することができたときautoだけので、あなたがそれを入力しないでください。それは時間の種類をコンパイルしていないのであれば、あなたは私たちがマップを使用し、合格してはならない、テンプレートクラスを与えるこのライブラリコードを呼び出す実際にはもちろん、自分自身をマップをコンパイルして実行されません、それはです。KeyValue型パラメータでなければなりません。

もちろん、オートC ++ 14と11は同じではありません、その記事にのみ自動の使用が記載されている、我々は、* 3、我々はすべてのベクトルの要素とリターンの機能を実現する、との違いを見ることができません

// C ++ 98 
のstd ::ベクトル< 整数 >&multiply_by_three(のstd ::ベクトル< 整数 >&V)
{ 
    のため(のstd ::ベクトル< 整数 > ::それはv.beginを()=イテレータ;!それ= V .END();それ++ 
    {
         *それ* = 3 
    } 
    戻りV。
}

非常に簡単な初心者は時々間違って、イテレータをスペルする方法を忘れて

// C ++ 11 
STD ::ベクトルは< INT >&multiply_by_three(STD ::ベクトル< INT >&V)
{ 
    // これは、&なくアドレス演算子を求めるための基準となる、直接速度を操作することができます
     // (参照ポインタと新たなオブジェクトとかさばることができるオブジェクトデストラクタオブジェクトを構築するコストを作成しません。)
    のための(自動&IT:V)
    { 
        IT * = 3 ; 
    } 
    戻りV; 
}

より速く、より良い書き込み

オート&multiply_by_three(スタンダード::ベクトル< INT >&V)
{ 
      ための(自動&こと:V)
      { 
          それ * = 3 
      } 
      戻りV。
}

価値判断の戻り値の型をサポートしています、私たちは時々、このようなこの種のように無名関数を書きます

ソート(S.begin()、S.end()、[] CONST  文字列&S、CONST  文字列C)
    { 
      リターン S> C; 
    } 
    )。

実際には、これらは、すべてのシンタックスシュガーラムダあります

以下は、様々な変数なオプションを傍受:
  • []任意の変数を取られていません
  • [&}外部スコープすべての変数がとり、関数の本体内の基準として使用
  • [=]範囲外ボディ内のすべての変数、及びコピー機能を講じ
  • [=、&フー]範囲外のコピー機能と本体で使用されるすべての変数を採取するが、参照変数fooの使用
  • [バー]バー取られ、他の変数が取られていない間の変数は、体重のコピー機能で使用されます
  • [これ]は、現在のクラスにこのポインタを取ら。デフォルト&や=を使用している場合は、このオプションを追加します。

糖衣構文は、多かれ少なかれ、ほぼすべての言語は、コードの構文を開発するプログラマの一部を提供してきている、それだけでコンパイラは、特定のバイトコードまたは特定の方法でこれらのコンパイル中に埋めいくつかのトリックを実装しています構文は、いくつかの処理を行うために、開発者は簡単に直接使用することができます。この構文は、言語自体の機能には影響はありません、それだけで開発効率を開発し、改善するためのプログラマの便宜のためです。端的に言えば、糖衣構文は、既存の文法のパッケージです。ただしこれらの糖衣構文は、かなりの改善を提供していない、または彼らは、パフォーマンスを向上させることができ、または文法の厳密さを向上させることができ、またはコーディングエラーの可能性を減らすことができます。

私たちは、違いは何であるトラバースアセンブリコード彼を見ることができます

など、-Sコマンドを使用してgccの-g -S B.cpp

私は、ああ、一部の命令が同じではないものを比較されませんでしたが、私はあまりにも理解して表示されません

おすすめ

転載: www.cnblogs.com/BobHuang/p/11220700.html