你們發現過C 標準庫BUG嗎?

時間 2021-05-07 04:40:16

1樓:Pluto Hades

標準庫bug以前標準不太標準的時候發現過,年代久遠不好找了

最近發現了gcc內建函式的bug,就是這個:output of instrinsic _xgetbv is wrongly overwritten

bug是怎麼產生的呢?他們沒寫return!對,實現這個有返回值函式的人沒有在函式末尾寫return!

2樓:小鑽風

可能也算不上是乙個標準庫的bug吧。。。

在c++17中,結構體可以通過結構化繫結實現tie,就像這樣auto[a

,b]=

std::

make_pair(1

,2)但是產生的a,b是不是變數就不一定了,這個得看編譯器,比如當你把產生的結果放入lambda表示式中捕獲的時候

是的,用tie解包就可以

參考Lambda implicit capture fails with variable declared from structured binding

還好我預設用的gcc編譯的,真是被嚇到了

3樓:提姆

說乙個語法實現的,不屬於stl。vc++的structured binding如果是引用的話會報錯。比如for(auto &[key, value] :

map),去掉引用就沒有問題。不過在vs2019中已修復。

4樓:Eric Qiang

分成兩種,一是C++的ISO標準有什麼bug嗎? 二是各大編譯器廠商實作的STL有什麼bug?

後者就多了。記得當初在VC++2015上遇到的STL問題,一通搜尋在stackoverflow上的答案是:M$實現的bug,但在VC++2017上也明確不會修改這個bug。

穩住,別浪。

5樓:洋蔥騎士

開源語音識別引擎kaldi 會提示乙個在GCC 4.8.1和4.8.2標準庫模板函式std::nth_element的乙個bug:

std::nth_element causes segfault; am I missing something, or a bug in STL?

[4.7/4.8/4.9 Regression] std::nth_element segfaults on valid input

這個bug在4.8.3中被修復了,然而某大廠的伺服器環境都是4.8.2,後來用了一些很trick的方法解決了這個問題。

6樓:Skiiii

GCC 4.8.2 支援 C++11,有 regex 模組,但是 regex 模組是假的,什麼都匹配不上。同時能夠編譯通過,甚至連個 static_assert 都懶得加。

不過這是編譯器的bug不是標準的。

要我說標準最坑爹的地方。。。。

C++11 引入 shared_ptr和 unique_ptr同時 make_shared 在C++11 引入,而 make_unique 卻在 C++14 引入。。。。

C++11 引入 mutex 模組。。

而讀寫鎖的實現 shared_mutex 卻在 C++17 引入。。。

對於公司只支援到11的編譯器來說,真是一種天殘地缺的體驗

7樓:d41d8c

C++17的std::optional::value_or 的規範曾經漏寫乙個constexpr。

其實只是編寫失誤,但是libstdc++和libc++都照著沒加constexpr的規範實現了。後來確認是失誤後,才慢慢修正(libc++是用了我寫的patch:https:

//reviews.llvm.org/D27850)。大概算是乙個「C++標準庫BUG」。

另外我個人發現&匯報過幾處規範不明確/不正確的情況,不過對實現都沒什麼影響。

C 標準庫有哪些問題?

可能是我接觸的語言太少,但凡有string型別,功能卻弱到約等於vector,基本只能當做buffer用的,只有cpp的標準庫。 我來說乙個,C 11新增的std mutex的lock 方法,連續呼叫兩次,在linux平台上會阻塞住執行緒,在windows平台上會直接崩潰。二者行為不一致,不知道這個...

C標準庫和Linux系統glibc C執行庫 的關係

C 標準主要由兩部分組成,一部分描述C的語法,另一部分描述C標準庫。C標準庫定義了一組標準標頭檔案,每個標頭檔案中包含一些相關的函式 變數 型別宣告和巨集定義。要在乙個平台上支援C語言,不僅要實現C編譯器,還要實現C標準庫,這樣的實現才算符合C標準。不符合C標準的實現也是存在的,例如很多微控制器的C...

c 怎麼讓自己寫的庫像標準庫那樣只需include標頭檔案就可以使用而不需要把實現原始碼加入工程裡?

沒辦法像標準庫那樣。標準庫可以只include標頭檔案是因為編譯器會預設鏈結標準庫的實現。其它回答裡面說的header only library,是把實現也一起寫在標頭檔案裡面了。不需要另外的cpp而已。如果你的目的是讓庫方便使用,就做成header only library,或者退一步,提供乙個標...