C++11的通常概念——The C++ standard library, 2nd Edition 筆記(二)

( 原書第四章,General Concepts)html

只介紹新內容,關於頭文件格式和後綴等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在語言層面和標準庫上,對併發編程都提供了很好的支持。下列前兩點爲核心語言層的支持。
    • 新的內存模型,獨立更新兩個不一樣線程中的不一樣對象是互相獨立的。奇怪了,獨立對象在不一樣的線程中怎麼可能會有訪問衝突?詳情請看這裏
    • thread_local關鍵字的引入,就是線程局部存儲,Windows中的TLS系列函數或者Linux下的pthread_key_t;
    • 與線程安全性相關的一些保證;
      • 多個線程共享一個庫對象,而且至少一個線程要修改它,可能會致使未定義行爲;
      • 一個線程正在構造對象,而另外一個對象已經開始使用它,或者一個線程還在使用對象,而另外一個線程已經開始析構它了,都會致使未定義行爲。
      • STL容器和容器適配器提供兩點保證:1, 只讀的併發訪問是安全的; 2, 對於同一容器中的不一樣元素進行訪問是安全的,vector<bool>除外(由於它是經過代理對象實現的。)
      • 與stdio同步的標準流的併發訪問是安全的。可是,stringstream, file stream或者stream buffer, 併發訪問的行爲未定義。
      • atexit()和at_quick_exit()的併發調用會被同步。new,terminate或者unexpected的handler也會被同步。getenv()也是同步的。
    • 支持併發函數庫和類庫(線程啓動和同步,第18章介紹);
  • allocator的簡要介紹:它是某種特定內存解決方案的基礎,好比共享內存,垃圾回收和麪向對象數據庫。關於默認的allocator,可參考《C++標準程序庫》chapter 15.
相關文章
相關標籤/搜索