C ++ 2009

  「プログラミング蚀語で最も重芁なのはその名前です。 
蚀語は良い名前がなければ成功したせん。 
私は最近非垞に良い名前を思い぀きたした、 
今では適切な蚀語を発明するこずが残っおいたす。」  
 D. E.クナット 




C ++ 09 Evolutionフラッシュバック





1998幎に批准された最初のC ++仕様の埌、5幎間の䌑憩が取られ、コンパむラ開発者が暙準に適応できるようになりたした。 たた、今回の「無線沈黙」により、委員䌚は文曞に関するフィヌドバックを受け取るこずができたした。 この期間の終わりに、ANSI暙準委員䌚は、修正ずさたざたな改善を含む曎新された仕様をリリヌスしたした。 これらの修正は、2003幎の最初の技術的゚ラヌリストに蚘茉されおいたす。







さらに、委員䌚のメンバヌはC ++の倉曎に関する提案を受け入れ始めたした。 このむニシアチブはC ++ 0xず呌ばれ、21䞖玀の最初の10幎で新しいバヌゞョンの蚀語が承認されるこずが予想されおいたした。 しかし、時間が経぀に぀れお明らかになりたした。新しいバヌゞョンの蚀語は2009幎よりも早く批准できなかったため、このむニシアチブはその名前をC ++ 09に倉曎したした。



ラむブラリ拡匵に関するドキュメントの開発は2004幎に開始され、2005幎1月に完了したしたTR1ず呌ばれおいたした。 暙準C ++ラむブラリにいく぀かの拡匵機胜を導入するこずを掚奚したしたが、その倚くはBoostフレヌムワヌクからのものです。 2006幎4月、委員䌚はすべおのTR1勧告を採甚したしたコンパむラ開発者が実装するのが困難な高レベルの数孊ラむブラリを陀きたす。 GCC 4.0は、ほずんどのTR1をstd :: tr1 ::名前空間に既に実装しおいたす。 GCCに加えお、Metrowerks CodeWarrior 9および10もこれを実行し、MicrosoftはVisual C ++ 2008 Feature Packをリリヌスし、TR1も実装しおいたす waskerのおかげです 。



暙準化開発委員䌚は、2007幎末たでにC ++ 09を完了する予定です。 同じ幎に、4月ず10月に2぀の䌚議が蚈画されおいたす。 障害がなければ、ドキュメントの最終版は2008幎に利甚可胜になり、2009幎のい぀かで批准が行われたす。



哲孊C ++ 09





箄10幎前にC ++ 98を批准した埌、暙準化委員䌚は蚀語に倧きな倉曎を加えるこずに関心がありたせんでしたが、初心者が孊習しやすく、よりアクセスしやすいものにする倉曎をサポヌトしたした。 倚くのプログラマヌは、特定のプログラミング蚀語の専門家になりたくありたせん。 それどころか、圌らは圌らの分野の専門家になりたいず思っおおり、単にタスクを実珟する手段ずしおC ++を䜿甚しおいたす。 匷力な新しいツヌルが蚀語に远加されたしたが、その䞻な目暙は䟝然ずしお蚀語を簡玠化するこずです。



別の目暙は、蚀語自䜓のコアを倉曎する前に暙準ラむブラリを簡単に曎新するこずです。 カヌネルの倉曎は非垞に危険であり、倧きな互換性の問題に぀ながる可胜性がありたす。 それどころか、ラむブラリの改善により、より少ないリスクで優れた柔軟性を実珟できたす。 たずえば、ガベヌゞコレクタヌの実装を考えおみたしょうセルフクリヌニング甚の蚀語のカヌネルを倉曎するずJavaおよびCで行われるように、より深刻な倉曎が発生し、䞋䜍互換性がさらに必芁になりたす。たた、暙準ラむブラリのスマヌトポむンタヌクラスのサポヌトにより、䜎コストでの機䌚。



最埌に、委員䌚は可胜な限り真の生産性を向䞊させるよう努めたした。 C ++の匷みの1぀は、そのパフォヌマンス比范的新しいCずJavaです。 そのため、倚くのプログラマヌがC ++を䞻芁なプログラミング蚀語ずしお遞択しおいたす。 IDCによるず、2003幎には玄300䞇人のC ++プログラマヌがいたため、蚀語をそうでないものに倉えようずするのではなく、利䟿性のために蚀語を改善するこずは理にかなっおいたす。



EC ++の有益な物語





1999幎、日本の組み蟌み開発者のコ​​ン゜ヌシアムNEC、日立、富士通、東芝を含むが、C ++のサブセットを匷調する提案を提出したした。 このサブセットは、コン゜ヌシアムのメンバヌによるず非垞に耇雑でパフォヌマンスに倧きなダメヌゞを䞎えた特定の数の蚀語機胜を削陀するこずを陀いお、C ++をほが繰り返したす。 削陀する必芁がある蚀語の䞻芁コンポヌネント倚重継承、パタヌン、䟋倖、RTTI、新しいキャスト挔算子、名前空間。 このような蚀語のサブセットは、Embedded C ++たたは単にEC ++ず呌ばれたす。



コン゜ヌシアムの驚いたこずに、EC ++コンパむラはC ++コンパむラよりも高速ではありたせんでした。 それどころか、堎合によっおははるかに遅くなりたした。 C ++の創蚭者であるBjarn Straustrupは、テンプレヌトがほずんどの暙準ラむブラリで䜿甚されおおり、それらの削陀は完党に非実甚的であるず説明したした。 同時に、コン゜ヌシアムは、テンプレヌトをサポヌトする拡匵拡匵EC ++の出珟が可胜であるず発衚したした。



拡匵EC ++コンパむラヌが利甚可胜になったずき、それらは再びより倧きな同等物ず䞀臎したした。 コン゜ヌシアムの驚いたこずに、C ++ず比范したパフォヌマンスの向䞊はごくわずかでした。 問題の䞀郚は、コン゜ヌシアムがC ++の原則「䜿甚しおいないものにお金を払う必芁がない」を無芖したこずです。 その埌、ISOはEC ++に関する提案を受け入れるこずを拒吊したした。



2004幎、EC ++の倧倱敗に觊発されたC ++ 0x委員䌚は、どのC ++機胜に実際に倧きなパフォヌマンスの問題があるかを刀断しようずしたした。 結局のずころ、生産性を本圓に高めるこずができるのは次の3぀の領域だけです。



 新芏および削陀
 RTTItypeidおよびdynamic_cast <>
䟋倖スロヌおよびキャッチ






メモリ割り圓おはパフォヌマンスに最も倧きな圱響を䞎えるこずが刀明したしたが、ヒヌプからメモリを割り圓おない蚀語を䜿甚するこずはほずんどありたせん。 RTTIず䟋倖凊理に関しお、倚くのコンパむラにはそれらをオフにするスむッチがありたす。 最新のコンパむラでは、䟋倖凊理はかなり高いレベルで実装されおおり、問題はRTTIのみにありたす。 いずれにせよ、C ++の原則に埓う堎合、蚀語の䞀郚の機胜を削陀するこずは、それらを無効にするこずに匹敵したす。



EC ++に関しお、Straustrupは次のように述べおいたす。 「私の意芋では、EC ++は死んでいたすが、そうでなければ死んでいるはずです。 」



修正ず改善





1998幎のC ++暙準はそれ自䜓が目芚しい成果であったにもかかわらず、いく぀かの問題がありたした。 キャッチが困難なものもあれば、既知の問題もありたしたが、倚くの堎合、新しい解決策を䜜成するには䞍十分でした。 Bjarn Straustrupがそれらのいく぀かを説明したした。䟋えば



 ベクトル<ベクトル<int >> xv;  //可胜です
 vector <double> xv {1.2、2.3、3.4};  // STLコンテナを初期化したす
列挙型のより匷力な型//列挙型はスコヌプ内に残りたす
テンプレヌトの倖郚化//翻蚳ナニット間での重耇なし 








䞊蚘の゚ラヌが発生する理由がわからない堎合は、発生の理由を理解しようずしないこずをお勧めしたす。 最初の゚ラヌのみを怜蚎したす。 欠点は、C ++ 98がベクトルの「>>」郚分を右シフト挔算子ずしお解析し、゚ラヌを生成するこずです。 C ++ 09では、この゚ラヌは修正されたす。 以䞋に小さな䟋を瀺したす。



 テンプレヌト<int I>
 struct myX
 {
      static int const x = 2;
 }
 
テンプレヌト<>
 struct myX <0>
 {
      typedef int x;
 }
 
テンプレヌト<typename T>
 struct myY
 {
      static int const x = 3;
 }
 
 static int const x = 4;
 
 cout <<myY <myX <1 >> :: x> :: x> :: x<< endl;  // C ++ 98は「3」を出力し、C ++ 09-「2」を出力したす 




ANSI / ISO C99ずの同期





C ++の批准から1幎埌、ANSI / ISO C仕様はC蚀語にいく぀かの倉曎を加えお曎新され、これらの倉曎の倚くは既にC ++で行われおいたすが、Cでも意味がありたす。 察照的に、他のものはC ++の䞀郚ではありたせんでしたが、委員䌚はそれらを䟡倀があるず芋なし、C ++ 09仕様に反映しようずしたした。 これらには以䞋が含たれたす。

  __func__ //配眮されおいる関数の名前を返したす
 long long // 64ビットの数倀に䞀般的に䜿甚される拡匵組み蟌み型
 int16_t、int32_t、inttpr_tなど  //特定の皮類の数倀
 double x = 0x1.F0 // 16進浮動小数点数
いく぀かの数孊関数の耇雑なバヌゞョン
固定数の匕数を取るマクロ 








C ++暙準ラむブラリの機胜匷化





暙準C ++ラむブラリSTLを含むは、倚数の䟿利なコンテナずナヌティリティです。 その機胜は充実しおいるにもかかわらず、ナヌザヌにずっお非垞に必芁な倚くのコンポヌネントがありたした。 C ++ 09は、これらのスペヌスを次の新しいラむブラリクラスで埋めたす。



  regexすべおが期埅する正芏衚珟クラス
配列<>独自のサむズを含む1次元配列0の堎合がありたす
 tuple <>tuple-tupleテンプレヌトクラス
 STLハッシュコンテナヌクラスunordered_set <>、unordered_map <> 








GCC 4Xcode 2.xを䜿甚する開発者は、std :: tr1 ::を介しお同様の拡匵機胜を䜿甚できるため、暙準ラむブラリのこのような倉曎を2009幎たで埅぀こずはできたせん。



ストリヌムの改善





ロヌカルストレヌゞ



 スレッドint x = 1;  //スレッド内でグロヌバルに 








原子操䜜



 アトミック
 {
	 //実行時に他のスレッドを䞭断したす
 } 






䞊列実行



 アクティブ
 {
	 {...} //最初の䞊列ブロック
	 {...} // 2番目の䞊列ブロック
	 {...} // 3番目の䞊列ブロック
 }






䞊列実行の堎合、コンパむラがこの堎所で䞊列ブロックは収益性がないず考える堎合、コンパむラはそれらを単に連続しお実行する可胜性がありたす。



このような蚀語の機胜は、pthread、mutexなどを䜿甚しお実行される開発を倧幅に簡玠化するこずは明らかです。 前述の特性は、C ++ 09委員䌚のメンバヌによっおただ議論されおいるため、若干の倉曎が行われる可胜性があるこずに泚意しおください。



このドキュメントでそのような改良に関する詳现を芋぀けるこずができたす 。



さたざたな数の匕数を持぀テンプレヌト





長幎の間、C蚀語では、関数が固定されおいない数のパラメヌタヌを持぀こずができたした。 残念ながら、これはC ++ 98では䞍可胜でした。 C ++ 09では、テンプレヌトにさたざたなタむプの型を含めるこずができたす。 最も簡単な䟋を次に瀺したす。



  // DEBUGフラグが蚭定されおいる堎合にのみstderrに出力したす
テンプレヌト<typename TypeArgs>
 void DebugMessageTypeArgs ... args
 {
	 #ifdef DEBUG
		 // stderrの゚ントリの実装
	 #else
		 //䜕もしたせん
	 #endif
 }

 //さらにコヌドで
 DebugMessage "n is"、n;
 DebugMessage "x is"、x、 "y is"、y、 "z is"、z;
 DebugMessage "これは私のトレヌス"、
		 "time ="、クロック、
		 「ファむル名=」、__ FILE__、
		 「行番号=」、「__ LINE__」、
		 「内郚関数」、__ func__; 








コンストラクタヌの委任





Cなどの他の蚀語では、1぀のクラスコンストラクタヌが別のクラスコンストラクタヌを呌び出すこずができたす。 C ++ 98ではこれは䞍可胜であったため、クラス開発者は別の初期化関数を䜜成する必芁がありたした。 C ++ 09では、次のコヌドに瀺すように、これが可胜になりたす。



 クラスMyClass
 {
    公開
            MyClass;  //デフォルトのコンストラクタヌ
            MyClassvoid * myptr;  //ポむンタを取埗したす
            MyClassint myvalue;  //数倀を取埗したす
 };
 
 MyClass :: MyClassMyClassNULL// Xを呌び出すvoid *
 {
     ... //コヌド
 }
 
 MyClass :: MyClassvoid * myptrMyClass0//呌び出しXint
 {
      ... //コヌド
 }

 MyClass :: MyClassint myvalue//委任されおいたせん
 {
      ... //コヌド
 } 








ヌルポむンタヌ





ANSIでは、C NULLはvoid *0ずしお定矩されたす。C++では、NULLは掚奚されたせん。 なんで Cずは異なり、C ++では、他の型のポむンタヌにvoidポむンタヌを割り圓おるのは間違っおいたす。



  void * vPtr = NULL;  // CずC ++の䞡方で修正
 int * viPtr = NULL;  // Cでは正しいが、C ++では間違っおいる
                                     // C ++ではint *にvoid *を添付できたせん
 int * viPtr = 0;  //右C ++ 








ただし、C ++コヌドでのNULLの分垃は非垞に倧きいため、倚くのコンパむラは、そのような割り圓おが発生するず譊告゚ラヌではなくを生成するだけです。 C ++でNULLを0ずしお再定矩し、キャスト゚ラヌの発生を防ぐものもありたす。 コンパむラのすべおの「瀌儀」にもかかわらず、これはすべお初心者のC ++プログラマを倧きく混乱させたす。



 ボむドバヌint;  //敎数倀を取埗したす
ボむドバヌchar *;  // charを取埗したす*

バヌ0;  //ポむンタですか、それずも単なる数字ですか
バヌNULL;  //察応するプロトタむプはありたせん 








したがっお、nullポむンタヌの䜿甚を簡玠化するために、nullptrがC ++ 09で導入されたした。 任意の型のポむンタヌで䜿甚できたすが、組み蟌み型には適甚できたせん。



  char * cPtr1 = nullptr;  // C ++のNULLポむンタヌ
 char * vcPtr2 = 0;  // True、ただし掚奚されたせん
 int n = nullptr;  //無効です
 myX * xPtr = nullptr;  //任意のタむプのポむンタヌで䜿甚できたす
 
ボむドバヌint;  //敎数倀を取埗したす
ボむドバヌchar *;  // charを取埗したす*
バヌ0;  // foointを呌び出したす
バヌnullptr;  // fooを呌び出したすchar * 








どこに行った





Cがちょうど開発䞭であったずき、autoキヌワヌドを䜿甚しお、コンパむラヌにスタック䞊の倉数の堎所を通知したした。䟋えば



  auto x;  / * x敎数ずいう名前の倉数がスタックにありたす* / 








ANSI Cが1989幎に批准されたずき、型定矩は削陀されたした。



  auto x;  / * ANSI Cでは無効* /
 int x;  / * True * /
 auto int x;  / *確かに、真実は䞍必芁です* / 








それ以来、1970幎代からautoを䜿甚した人はほずんどいたせんでしたが、autoはCおよびC ++でのキヌワヌドになりたした。 30幎埌、C ++ 09暙準はautoキヌワヌドを再導入したす。 このキヌワヌドで定矩された倉数は、初期化時に型を自動的に取埗したす。



  auto y = 10.0;  // yは浮動小数点数です
 auto z = 10LL;  // zはlong long
 const auto * p =y;  // pはconst double * 








収益性は、次のような耇雑なビュヌず組み合わせお䜿甚​​するず、より明確になりたす。



  void * barconst int doubleArray [64] [16];
 auto myFcnPtr = bar;  // myFcnPtrのタむプが「void *const int*[16]」になりたした 








その䞊、autoは、型がそれほど重芁ではない䞀時倉数に察しお非垞に䟿利になりたす。 STLコンテナの芁玠を通過する次の関数を怜蚎しおください。



 ボむドバヌベクタヌ<MySpace :: MyClass *> x
 {
      forauto ptr = x.begin; ptr= x.end; ptr ++
      {
          ... //さたざたな皮類のコヌド
      }
 } 








autoキヌワヌドがない堎合、ptr倉数の型はvector <MySpace :: MyClass *> :: iteratorになりたす。 さらに、このコンテナヌの倉曎たずえば、ベクタヌ<>からリスト<>ぞの倉曎、クラス名、名前空間名の倉曎などは、ルヌプ内でそのタむプが絶察に重芁ではないずいう事実にもかかわらず、プログラマヌに確実にptr倉数の定矩を倉曎させたす。



興味深いこずに、Cでは、varキヌワヌドを䜿甚しお同様の動䜜が䜜成されたす。



C ++ 09でautoを䜿甚するには、ただ初期化が必芁であるこずに泚意しおください。



  auto x;  // C ++ 09で無効 








しかし、別の倉数に基づいお必芁な型を知っおいたが、初期化したくなかったずしたすか 新しいdecltypeキヌワヌドは、次のコヌドスニペットなどの目的で䜿甚できたす。



  bool SelectionSort二重デヌタ[256]、二重蚱容倀;
 bool BubbleSort二重デヌタ[256]、二重蚱容倀;
 bool QuikSort二重デヌタ[256]、二重蚱容倀;

 decltypeSelectionSortmySortFcn;

 ifbUseSelectionSort
    mySortFcn = SelectionSort;
 else ifbUseBubbleSort
    mySortFcn = BubbleSort;
他に 
    mySortFcn = QuikSort; 








スマヌトポむンタヌ





スマヌトポむンタヌは、プログラマヌに䟝存せずに、メモリから自分自身を削陀する必芁がある時間を自身で理解できるオブゞェクトです。 JavaやCなどのほずんどすべおの最新蚀語は、䞍必芁なメモリリヌクを回避する同様のモデルに埓っおメモリを管理したす。 C ++ 98では、同様の小さなオブゞェクトauto_ptr <>がありたした。 残念ながら、auto_ptr <>にはいく぀かの制限がありたすが、最も顕著なのは、独自のアクセス分散モデルの䜿甚です。 ぀たり、最埌のauto_ptr <>がメモリの唯䞀の所有者でした。



  auto_ptr <int> ptr1新しいint [1024]; 
 auto_ptr <int> ptr2 = ptr1; 








このため、C ++コミュニティでは、auto_ptr <>の䜿甚回数はれロになる傟向がありたす。



C ++ 09暙準ラむブラリには、よりスマヌトなポむンタビュヌshared_ptr <>が導入されおいたす。 auto_ptr <>ずの䞻な違いは、分散暩利モデルず参照カりンタヌを䜿甚しお、い぀メモリを解攟するかを決定するこずです。 䟋



 メむン
 {
      shared_ptr <int> ptr1;  //スマヌトNULLポむンタヌ
      ...
      {
           shared_ptr <int> ptr2新しいint [1024];
           ptr1 = ptr2;  //所有物の分垃封建
      }
      // ptr2が削陀され、ptr1のみが残りたす
      //メモリはただ解攟されおいたせん
 }
 // ptr1が削陀され、メモリが解攟されたした 








shared_ptr <>はポむンタヌず芋なすこずができるため、* ptrずしお䜿甚でき、ptr1-> fooなどの構造で䜿甚できたす。



 明瀺的なshared_ptr <T>T * ptr;  //メモリにアタッチしたす
 shared_ptr <T>T * ptr、Fcn delFcn;  //メモリずナヌザヌ定矩のクリヌンアップ関数にアタッチしたす 
 shared_ptr <T>shared_ptr <T> ptr;  //コンストラクタをコピヌしたす
 shared_ptr <T>auto_ptr <T> ptr;  // auto_ptrで倉換<> 








最埌のコンストラクタがauto_ptr <>からshared_ptr <>にデヌタを倉換するこずに泚意しおください。これにより、以前のバヌゞョンのコヌドからの移行が倧幅に容易になり、䞋䜍互換性が提䟛されたす。 swap、static_pointer_cast、dynamic_pointer_castなど、いく぀かの远加機胜が提䟛されおいたす。



shared_ptr <>はすでにstd :: tr1 ::名前空間の䞀郚であり、MacプログラマヌはXcode 2.x以降で䜿甚できたす。



右蟺倀リンク





Cでは、関数パラメヌタヌは垞に倀で枡されたす。぀たり、パラメヌタヌのコピヌが枡されたすが、その倀は関係ありたせん。 Cの倉数を倉曎するには、䟋のように、関数はポむンタヌを枡す必芁がありたす。



  void fooint valueParameter、int * pointerParameter
 {
        ++ valueParameter;  //パラメヌタは倀で枡され、ロヌカルコピヌが倉曎されたす 
        ++ pointerParameter;  //ポむンタは倀で枡されたすが、ロヌカルコピヌはずにかく倉曎されたす
        ++ * pointerParameter;  //この倉曎は䞀定のたた
 } 








C ++の最も匷力な機胜の1぀は、 挔算子を䜿甚しお参照によっおパラメヌタヌを枡すこずでした。 これにより、ポむンタヌを䜿甚せずにパラメヌタヌデヌタを盎接倉曎できたした。



  void fooint valueParameter、intreferenceParameter
 {
        ++ valueParameter;  //パラメヌタは倀で枡され、ロヌカルコピヌが倉曎されたす
        ++ referenceParameter;  //参照枡しで、倉曎は䞀定のたた
 } 








リンクは、右蟺倀読み取り専甚ではなく、巊蟺倀これらは倉曎可胜な倉数であるために適甚する必芁がありたす。



  int myIntA = 10;
 int myIntB = 20;
 
 foomyIntA、myIntB;  // myIntA = 10、myIntB = 21
 foo1、myIntA;  //倀で枡される1、myIntA = 11
 foomyIntA、1;  //゚ラヌ1は右蟺倀であり、枡すこずはできたせん
 foo0、myIntB + 1;  //゚ラヌmyIntB + 1は右蟺倀であり、枡すこずはできたせん 








内容を倉曎する必芁がない堎合でも、参照によっおパラメヌタヌを枡すず䟿利な堎合がありたす。 これは、倧きなクラスたたは構造が関数に枡され、そのような巚倧なオブゞェクトのコピヌを避ける必芁がある堎合に特に優れた゜リュヌションです。



  void fooBigClass valueParameter、const BigClassおよびconstRefParameter
 {
      ++ valueParameter;  //倀枡し、倉曎は䞀時的
      ++ constRefParameter;  //゚ラヌ定数パラメヌタを倉曎できたせん
 } 








C ++ 09では、右蟺倀リンクず呌ばれる新しいタむプのリンクが導入されたしたしたがっお、C ++ 98でおなじみのリンクタむプは巊蟺倀リンクず呌ばれるようになりたす。 右蟺倀リンクは䞀時デヌタに添付できたすが、コピヌせずに盎接倉曎できたす。 &&挔算子は、リンクが右蟺倀リンクであるず蚀いたす。



  void fooint valueParameter、intlvalRefParameter、int && rvalRefParameter
 {
        ++ valueParameter;  //パラメヌタは倀で枡され、すべおの倉曎はロヌカルです
        ++ lvalRefParameter;  //巊蟺倀リンク、すべおの倉曎は氞続的
        ++ rvalRefParameter;  //右蟺倀リンク、コピヌを必芁ずしないロヌカル倉曎
 }
 
 foo0、myIntA、myIntB + 1;  //䞀時的な倀myIntB + 1はコピヌされたせんが、枡すこずができたす 








右蟺倀リンクの䞻な利点の1぀は、移動のセマンティクスを利甚できるこずです。぀たり、コピヌせずに1぀の倉数から別の倉数にデヌタを移動できたす。 クラスは、コピヌコンストラクタヌの代わりに、たたはコピヌコンストラクタヌず共に移動コンストラクタヌを定矩できたす。



  //クラス定矩
クラスX
 {
    公開
            X;  //デフォルトのコンストラクタヌ
            X定数Xx;  //コンストラクタをコピヌしたす巊蟺倀参照
            XX && x;  //コンストラクタヌを移動したす右蟺倀参照
 };
 
 // Xを返すさたざたな関数
 Xバヌ; 
 X x1;  //デフォルトのコンストラクタを䜿甚しおx1オブゞェクトを䜜成したす
 X x2x1;  // x2はx1のコピヌになりたす
 X x3バヌ;  // barは䞀時的なXを返し、メモリは盎接x3に移動したす 








動䜜のセマンティクスの䞻な動機は、生産性の向䞊です。 2぀の行ベクトルがあり、それらの間でデヌタを亀換するずしたす。 暙準のコピヌロゞックを䜿甚しお、次のコヌドを取埗したす。



  void SwapDataベクタヌ<string>v1、ベクタヌ<string>v2
 {
      vector <string> temp = v1;  //新しいコピヌv1
      v1 = v2;  //新しいコピヌv2
      v2 = temp;  //䞀時のNoviaコピヌ
 }; 








移動のロゞックを䜿甚するず、次のようなものが埗られたす。



  void SwapDataベクタヌ<string>v1、ベクタヌ<string>v2
 {
     ベクタヌ<string> temp =ベクタヌ<string> &&v1;  // temp-v1ず同じデヌタ
      v1 =ベクタヌ<string> &&v2;  // v1にはv2が含たれたす
      v2 =ベクタヌ<string> &&temp;  // v2は䞀時デヌタを指したす
 }
         
 //単䞀のコピヌではなく、移動のみが䜜成されたした 








C ++ 09のその他の远加





説明した機胜に加えお、他の倉曎点のリストを以䞋に瀺したす。



新しい文字タむプ chart16_t、char32_t





静的ステヌトメント アサヌト、Boost ::から

゚むリアステンプレヌト

型チェック is_pointer、is_same

Foreachの玹介

新しい乱数ゞェネレヌタヌ




結論





C ++の次のバヌゞョンぞの倚くの倉曎は、暙準ラむブラリに関連しおいるずいう事実により、プログラマヌが利甚できるようになりたした。 それにもかかわらず、蚀語の今埌の曎新に備えるこずは今䟡倀がありたす。 これらすべおの倉曎に぀いお読むず、C ++にはかなり興味深い未来があるこずが明らかになりたす。



All Articles