C++11の一般的な概念--The C++standard library,2 nd Editionノート(二)

5443 ワード

(原書第四章,General Concepts)
新しい内容のみを紹介し,ヘッダファイルフォーマットや接尾辞などC++03が正規化された内容については,これ以上述べることはない.
  • namespace std:新しいstdサブスペースは次のとおりです.
  • std::tr1, tr1 = technical report 1;
  • std::rel_opsは、==と<演算ですべての比較演算のoperator定義を実現する.
  • std::chrono、精度に関係のないタイムライブラリchronoの名前空間;
  • std::placeholders,bindテンプレートのプレースホルダ名前空間;
  • std::regex_constantsは、regexタイプと特性の定数の名前空間を指定します.
  • std::this_threadは、特定のスレッド情報を提供するグローバルスレッド関数の名前空間である.

  • エラーと異常処理:stringのエラー処理は非常に細かく、stlとvalarryは時間最適化傾向にあるため、論理エラーはほとんどチェックされません.
  • 呼び出し可能オブジェクト(Callable Objects):関数、(メンバー)関数ポインタ、関数オブジェクト、lambdaを含む何らかの機能を呼び出すことができるオブジェクト.
  • void func(int x, int y);
    auto l = [](int x, int y){...};
    class C {
      public:
        void operator()(int x, int y);
        void memfunc(int x, int y);
    }
    
    int main()
    {
       C c;
       std::shared_ptr<C> sp(new C); 
       std::bind(func, 3, 7)(); //   (); func(3, 7)
       std::bind(C(), 3, 7)(); // C()(3, 7);
       std::bind(l, 3, 7)(); //l(3, 7);
       std::bind(&C::memfunc, c, 3, 7)(); // c.memfunc(3, 7);
       std::bind(&C::memfunc, sp, 3, 7)(); // sp->memfunc(3, 7);
       
       //async         
       std::async(func, 3, 7); //   (); func(3, 7)
       std::async(c, 3, 7); // c.operator()(3, 7);
       std::async(l, 3, 7); //l(3, 7);
       std::async(&C::memfunc, &c, 3, 7)(); // c.memfunc(3, 7);
       std::async(&C::memfunc, sp, 3, 7)(); // sp->memfunc(3, 7);
    }
  • 同時およびマルチスレッド:C++11は言語レベルおよび標準ライブラリ上で、同時プログラミングをサポートしています.次の最初の2点は、コア言語層のサポートです.
  • 新しいメモリモデルでは、2つの異なるスレッドの異なるオブジェクトが互いに独立して更新されます.不思議なことに、独立したオブジェクトが異なるスレッドでアクセス競合する可能性はありません.詳細はここを参照してください.
  • thread_localキーワードの導入は、スレッドローカルストレージ、WindowsのTLSシリーズ関数、またはLinuxのpthread_key_tです.
  • スレッドのセキュリティに関連するいくつかの保証.
  • 複数のスレッドが1つのライブラリオブジェクトを共有し、少なくとも1つのスレッドが変更すると、未定義の動作を引き起こす可能性があります.
  • スレッドがオブジェクトを構築していますが、別のオブジェクトが使用を開始しているか、または1つのスレッドがオブジェクトを使用しているか、別のスレッドが解析を開始している場合、未定義の動作が発生します.
  • STLコンテナとコンテナアダプタは2つの保証を提供します:1、読み取り専用の同時アクセスは安全です;2、同じコンテナ内の異なる要素へのアクセスは安全であり、vectorを除く(エージェントオブジェクトによって実現されるため).
  • stdioに同期した標準ストリームへの同時アクセスは安全です.ただし、stringstream、file streamまたはstream bufferは、同時アクセスの動作は定義されていません.
  • atexit()とat_quick_exit()の同時呼び出しが同期されます.new,terminateまたはunexpectedのhandlerも同期される.getenv()も同期しています.

  • は、数ライブラリとクラスライブラリをサポートし、送信します(スレッドの起動と同期、18章で説明します).
  • allocatorの簡単な説明:共有メモリ、ゴミ回収、オブジェクト向けデータベースなどの特定のメモリソリューションの基礎です.デフォルトのallocatorについては、「C++標準ライブラリ」chapter 15を参照してください.