C++0x是ISO計劃于2011年底完成的下一版C++語言標準。從2004年2月7日起陸續推出多個工作草案,當前最新的是2009年11月9日發布的N3000(http://www.open-std.org/ JTC1/SC22/ WG21/docs/papers/2009/n3000.pdf)。
新的C++標準將大幅改善C++內核語言領域,包括多線程支持、泛型編程、統一的初始化,以及表現的加強等。具體的改進有:增加右值引用(typename &&)、擴展常數表達式(引入新關鍵字constexpr)、放寬關于POD(Plain Old Data,簡單舊數據)型結構的定義、引入外部模板概念(extern template class)、將初始化列表的概念綁定到類型上(std::initializer_list)、提供一種統一語法來初始化任意對象、可進行類型推導(auto)、支持以范圍為基礎的for循環、允許定義λ(lambda)函數、引進一種新的函數定義與聲明的語法(template< typename LHS, typename RHS> [] AddingFunc(const LHS &lhs, const RHS &rhs) -> decltype(lhs+rhs) {return lhs + rhs;})、允許派生類手動繼承基底類的構造函數(using 基類名::基類名;)、引入表示空指針常數的新關鍵字(nullptr)、引進一種特別的枚舉類(enum class)、關鍵字explicit修飾符可用于顯示類型轉換、可用于模板類型的別名定義(template<…> using TypedefName = SomeType<…>;)、移除所有對 union 的使用限制(除了其成員仍然不能是引用類型)、加入(允許任意個數和任意類別的模板實參的)變長參數模板、增加兩種新的字符類別char16_t(UTF-16)和char32_t(UTF-32)(傳統的char類型對應于UTF-8)和新的字符串常量(u8"I'm a UTF-8 string."、u"This is a UTF-16 string."、U"This is a UTF-32 string.")、允許用戶自定義新的常量修飾符(literal modifier)、引入支持多線程編程的多任務存儲器模型和線程區域的存儲期限(thread_local)、可使用或禁用對象的默認函數(default和delete)、(同C99)增加64位的整數類型(long long int)、增加用于測試的靜態聲明(assertion)、允許sizeof操作符作用在類的數據成員上(無須明確的對象)。
C++0x標準程序庫將引進數個新功能,其中許多可以在現行標準下實現,而另外一些則依賴于(或多或少)新的C++0x內核語言機能。新的程序庫的大部分被定義于于2005年發布發TR1(Library Technical Report,庫技術報告),各式TR1的完全或部分實現目前提供在命名空間std::tr1,C++0x會將其移置于命名空間std之下。例如,增加了處理正則表達式(regular expression)的庫(對應的頭文件為<regex>)和可擴展的隨機數功能。
新聞熱點
疑難解答