C++ Technical Report 1

C++ Technical Report 1（TR1）是ISO/IEC TR 19768, C++ Library Extensions（函式庫擴充）的一般名稱。TR1是一份文件，內容提出了對C++標準函式庫的追加項目。這些追加項目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己並非標準，它是一份草稿文件。然而它所提出的項目大多数已成為的C++11及之后版本的官方標準的一部分。這份文件的目標在於「為擴充的C++標準函式庫建立更為廣泛的現成實作品」。 編譯器並不需要保證包含TR1的組件，因為TR1并非官方标准的一部分。順帶一提，Boost提供了TR1大部分的實作，數個編譯器／函式庫開發商也已提供了各自的實作版本。 TR1並不代表下一屆標準的全部；舉例而言，下一屆的標準C++11包含了线程的支援。 新的組件被放置在std::tr1的命名空間（namespace）裡，以和現在的標準函式庫做區別。 TR1包含以下組件： 引用包装器（Reference Wrapper） 來自Boost.Ref 在<functional> 头文件中增加了 - cref、ref、reference_wrapper 可以对算法（algorithms）或仿函数（function objects）传递引用（references），而不是传递副本。 一個wrapper reference是由模板类reference_wrapper產生的實體（instance）獲得。wrapper reference近似於C++語言中的引用。 使用ref以獲得任何实例的wrapper reference（對常数引用const &使用cref）。 wrapper reference對模板函数(template function)尤其有用，當模板参数推導不出引用的時候（範例如下：） void f( int &r ) { r++; } template< class Funct, class Arg > void g( Funct f, Arg t ) { f(t); } int main() { int i = 0; g( f, i ); // 'g< void(int &r), int >' 被实例化 cout << i << endl; // 輸出：0 g( f, ref(i) ); // 'g< void(int &r), reference_wrapper<int> >' 被实例化 cout << i << endl; // 輸出：1 } 智能指针（Smart Pointers） 基于Boost Smart Pointer library 由<memory>头文件增加了 - shared_ptr、weak_ptr等 将Resource Acquisition Is Initialization(RAII)手法用於内存管理和異常安全性。 以下四個模組被加進<functional>標頭檔之中： 多形態的函式包裝器（Polymorphic Function Wrapper） function 基於Boost.Function 儲存任何使用特定函式簽名的"可呼叫物"（函数指针、成員函式指针、仿函数），不需要可呼叫物確切的型別。 仿函数綁定器（Function Object Binders） bind 採納自Boost Bind library 標準std::bind1st和std::bind2nd的通用版 將參數綁定給仿函数，並且允許函式的結合。 函式返回型別 result_of 採納自Boost 決定函式呼叫的返回型別 成員函式 mem_fn 採納自Boost Mem Fn library 標準std::mem_fun和std::mem_fun_ref的加強版 允許成員函式指针能夠像仿函数一樣 新的<type_traits>头文件 - is_pod、has_virtual_destructor、remove_extent等 採納自Boost Type Traits library 允許类编查询以及类别間的轉換，可促進元編程 新的<random>头文件 - variate_generator、mersenne_twister、poisson_distribution等 採納自Boost Random Number Library 新的<cmath>/<math.h>头文件 - beta、legendre等 23種數學函式 新<tuple>標頭檔 - tuple 採納自Boost Tuple library 標準std::pair的擴充 固定尺寸的元素集合，元素可以是不同的类型 新<array>標頭檔 - array 來自Boost Array library 与動態陣列型別，像是標準的std::vector相反，是静态的矩阵，但是能够享受类似于begin()等与std::vector相似的接口。 新<unordered_set>、<unordered_map>標頭檔 完全是新的實作，不衍生自既有之程式庫。與既有之程式庫API並不完全相容 就如同所有的哈希表提供常數時間的元素查找，但最壞情況查找時間與容器的大小呈線性關係。 新<regex>標頭檔 - regex、regex_match、 regex_search、regex_replace等 来自Boost RegEx library pattern matching library C++被設計成與C語言兼容，但由於不同的標準，C++並不是C的嚴格超集合。TR1試圖調和這些差異，透過對各種標頭檔，如<complex>、<locale>、<cmath>等進行擴充。 這些改變幫助C++能夠與C99版本的C標準更為一致（並非所有C99都包含於TR1）。 C++11，C++新標準 C99，C語言標準 Boost library，提供大量的C++程式庫，數個包含於TR1 STL標準模板庫，現行C++標準程式庫的一部分 ref - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-04-03）.  Boost.SmartPtr: The Smart Pointer Library - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-04-03）.  Chapter 16. Boost.Function - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-04-03）.  Chapter 1. Boost.Bind - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-04-03）.  Chapter 1. Boost.Member Function - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-04-03）.  Chapter 1. Boost.TypeTraits - 1.37.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-07-15）.  [1]（页面存档备份，存于互联网档案馆） The Boost Tuple Library – Boost 1.48.0. [2006-05-27]. （原始内容存档于2006-05-26）.  Chapter 5. Boost.Array - 1.72.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-07-01）.  Boost.Regex - 1.36.0. www.boost.org. [2022-07-01]. （原始内容存档于2022-07-11）.  ISO/IEC JTC1/SC22/WG21. Draft Technical Report on C++ Library Extensions (PDF). 2005-06-24 [2009-01-27]. （原始内容存档 (PDF)于2011-04-14）.  Becker, Peter. The C++ Standard Library Extensions: A Tutorial and Reference. Addison-Wesley Professional. 2006. ISBN 0-321-41299-0.  Scott Meyers' Effective C++: TR1 Information（页面存档备份，存于互联网档案馆） - 包含TR1提案文件的連結，提供了TR1程式庫的背景以及理由。