2016-08-15 54 views
1

The C++ Standard Library - A Tutorial and Reference, 2nd Edition指代安全版本的STL支持各種實用工具,如運行時間邊界檢查operator []和其他操作員。例如,在p247上:Linux上STL的安全版本

因此,至少在軟件開發期間使用「安全」STL是一個好主意。 Cary Horstmann介紹了安全STL的第一個版本(見 [SafeSTL])。另一個例子是「STLport」,它幾乎可以在 [STLPort]的任何平臺上免費獲得 。另外,圖書館供應商現在提供標記以啓用「更安全」模式,其中 尤其應在開發期間啓用。

這兩個建議的軟件包看起來相對過時(最新開發於2008年),不包括更新的C++ 11/14功能。在Linux上有一些主要的編譯器(gccclang)還是作爲獨立的庫提供了更多的最新信譽實現?

+1

你能真正引用它說的這個地方嗎?我認爲可能會提示'at'代替'operator []',因爲'at'不會檢查'operator []'不在的位置。 – NathanOliver

回答

6

libstdC++有一個debug mode,它可以通過在編譯時定義_GLIBCXX_DEBUG來啓用。

的的libstdC++調試模式執行檢查C++標準的許多領域,但重點是檢查標準的迭代器,容器,和算法之間的相互作用,其中包括:

  • 安全迭代:迭代器會跟蹤其參考元素的容器,因此會立即診斷錯誤,例如增加過時端迭代器或取消引用指向已被破壞的容器的迭代器。

  • 算法前提條件:算法嘗試驗證其輸入參數以儘早檢測錯誤。例如,set_intersection算法要求其迭代器參數first1last1形成有效的迭代器範圍,並且序列[first1, last1)根據傳遞給set_intersection的相同謂詞進行排序;如果序列未被排序或被不同的謂詞排序,libstdC++調試模式將檢測到錯誤。

界在operator[]is included檢查。

+0

我已經閱讀過有關'通過在幾個地方定義_GLIBCXX_DEBUG'啓用的信息,但是**這意味着什麼?我是否通過命令行將'-D_GLIBCXX_DEBUG'傳遞給編譯器? – shuhalo

+1

@shuhalo yup! - – Quentin