為什麼 C 的 STL 如 libc libstdc 都沒有標準文件?

時間 2021-05-30 07:45:04

1樓:肖堂-數蠶

因為標準庫是有標準的,參考標準就可以了,另外他們的庫也有文件,編譯的時候可以生成。

cppreference. com有近乎標準化的文件

2樓:徐辰

「不正確/不規範「和「一跑就崩」之間的差別你仔細體會一下。

就好比你開車上了對面車道也不一定會立刻車毀人亡對不?按照你的邏輯如果司機還活著就說明交規的設計有問題(如果你真這麼想我支援你)。

3樓:雨花

誰能徹底消滅UB,誰就能解決停機問題。

只不過C++不讓效能為照顧所有程式設計師的能力而買單,所以人機介面看起來醜陋一點,不太符合人類的生物性。邊界檢查都是要效能的,你可以用msvc開debug模式邊界檢查試試速度

4樓:Krys

同意 @sin1080 的答案

我覺得很多人都像題主這次出問題一樣,犯了乙個基本錯誤,就是C/C++在研究它的特性的時候永遠不能基於執行期的事實現象,而是應該基於文件和標準來程式設計。因為UB不是每次都會讓你吃驚的,而且有時候因為程式小所以UB不會讓你疼。

5樓:粉紅掃帚

std::equal - cppreference.com

1,3) Returns true if the range [first1, last1) is equal to the range [first2, first2 + (last1 - first1)), and false otherwise

明確講了第二個區間會採用 first2 到 first2 + (last1 - first1)),假如你的第二個區間滿足不了這個條件,比如說沒有這麼大,那麼結果就是未定義的。對於這種情形,STL 也提供了以下的版本

5,7) Returns true if the range [first1, last1) is equal to the range [first2, last2), and false otherwise.

學習的時候,多站在設計者的角度思考一下,假如是由你來設計 bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2 ) 這個函式,在第二個區間只提供乙個 first2 的情況下,這個函式他怎麼可能知道第二個區間會不會越界,從而返回 false 或拋異常?然後你的疑惑就會明白了。

另外描述裡的 algorithm 拼錯成 algoritm 了。

6樓:歐文韜

libstdc++文件: https://gcc.gnu.org/onlinedocs/libstdc++/index.html

vc的文件msdn上有。

libc++的文件我也沒找到。不過cxx文件我一般看 http://en.cppreference.com/

7樓:d41d8c

現在還介紹three-legged algorithm,要說過時確實是過時。

至於合法性嘛,注意標準提到了first2 + (last1 - first1),如果這個表示式是UB,那麼結果自然是UB

如何最簡單 通俗地理解C 的STL?

寫bug的程式設計師 簡單 通俗理解 那就是vector list unordered map iterator 把這些搞清楚,基本也就入門了,再慢慢看吧 後端技術小屋 學習乙個東西,首先要先用上,才能對它有乙個直觀感性的了解。在了解用法的基礎上再深挖個中原理才能有的放矢。STL是C 的乙個重要組成...

求推薦講STL的基於C 11的書

張昊 STL的標準教材和參考書不應該是這本嗎?The C Standard Library A Tutorial and Reference 2nd Edition 0785342623215 Nicolai M.Josuttis Books 第二版已經完全覆蓋C 11,亞馬遜上4.6星評分。另外S...

STL為什麼採用snake case這種和其他類庫在一起時略顯違和的命名方式作為其命名風格?

已登出 違和不違和只是你內心的一種感覺而已,你覺得長得不太一樣的東西不應該放在一起,這樣的觀點真的正確嗎?你為什麼抱怨STL和boost庫而不抱怨其它庫的風格不像像前兩者一樣呢?改變自己內心的狀態吧,當你能很輕鬆的接受這兩種風格混用,這叫進步,懂嗎? CNife 這種風格不統一,個人認為主要是歷史原...