bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C++小知識:大于0并不意味著等于1

注:本文所指出的錯誤例子其實非常簡單,任何 C++ 的初學者都能看懂。但是這個錯誤也非常典型,估計很多非常嚴肅的代碼里面都存在這樣的錯誤。

網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、重慶小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了合水免費建站歡迎大家使用!

這個 Bug 是來自于 CoreCLR 源代碼。

錯誤代碼:

bool operator( )(const GUID& _Key1, const GUID& _Key2) const
 { return memcmp(&_Key1, &_Key2, sizeof(GUID)) == -1; }

解釋:

你不能將 memcpy()、strcmp() 以及其他一些標準函數的返回值,和 1、-1 這些具體的數字做比較,因為這些函數的返回值只保證大于 0 或者小于 0(譯注:而并不保證大于0就等于1,小于0就等于-1)。

上面那段錯誤的代碼可能在很長時間內都能正常工作。不過那僅僅是因為運氣好而已,沒什么其他原因。某一天你寫的函數很可能突然間就崩潰了 —— 比如,你換了一個編譯器編譯源代碼,或者通過其他方式優化了 memcpy() 函數。然后你的代碼就不能正常工作了。

正確的代碼:

bool operator( )(const GUID& _Key1, const GUID& _Key2) const
 { return memcmp(&_Key1, &_Key2, sizeof(GUID)) < 0; }

建議:

不要依賴函數本身的行為。如果文檔上說一個函數能返回一個不等于 0 的值,那它就是這么實現的。也就是說這個函數可能返回 -10、2 或者 1024。你可能經常看到函數的返回值就是 -1、0 或者 1,但是這并不能保證它每次都會這么做。

這個錯誤是通過 PSV-Studio 靜態分析工具掃描分析得到的。錯誤文本如下:V698 表達式 “memcmp(…) == -1“ 是不正確的。這個函數可能的返回值不一定只有“-1”,而可能是任何負數。請考慮到使用 “memcmp(…) < 0 ”來替換。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創新互聯的支持。如果你想了解更多相關內容請查看下面相關鏈接

當前文章:C++小知識:大于0并不意味著等于1
本文來源:http://vcdvsql.cn/article8/pcdsip.html

成都網站建設公司_創新互聯,為您提供網頁設計公司網站設計用戶體驗服務器托管網站制作App開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發