第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用-1作為無符號(size_t)類型的標(biāo)志值

使用-1作為無符號(size_t)類型的標(biāo)志值

C++
回首憶惘然 2019-11-20 10:02:23
我正在使用-1作為其返回類型為size_t(無符號類型)的函數(shù)的標(biāo)志值。我最初沒有注意到它,特別是因為它沒有在我的代碼中引起任何錯誤(我使用x == -1進行檢查,而不是x <0)。有什么微妙的原因我不應(yīng)該保留它嗎?什么時候會出現(xiàn)意外情況?這是常用的嗎?ptrdiff_t不太常見,需要花費較長的時間輸入,而且由于函數(shù)會將索引返回到數(shù)組中,因此它并不是真正合適的類型。
查看完整描述

3 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

-1將始終轉(zhuǎn)換為最大無符號值,這是由于“ 4.7 整數(shù)轉(zhuǎn)換”部分所致:


如果目標(biāo)類型是無符號類型,則結(jié)果值是與源整數(shù)一致的最小無符號整數(shù)(取模2n,其中n是用于表示無符號類型的位數(shù))。[注意:在二進制補碼表示中,此轉(zhuǎn)換是概念性的,并且位模式?jīng)]有任何變化(如果沒有截斷)?!沧


C99的相同報價來自6.3.1.3:


否則,如果新類型是無符號的,則通過重復(fù)添加或減去比新類型中可以表示的最大值多一個值來轉(zhuǎn)換該值,直到該值在新類型的范圍內(nèi)為止。49)


因此,我們最終得到:


-1 + (UMAX + 1)

這是:


UMAX


查看完整回答
反對 回復(fù) 2019-11-20
?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

明顯的警告在于一組元素的大小等于可能的最大大小。在實踐中發(fā)生這種情況的可能性和可用性,并且實際上實際上是造成問題的原因。

如果您查看C ++ std::string類,您會注意到static std::string::npos數(shù)據(jù)成員被定義為完全-1轉(zhuǎn)換為std::string::size_type(實際上只是std::size_t。)這給該“技術(shù)”帶來了優(yōu)先感,使它能夠完成“ Least Surprise?”的原理。永遠是一件好事?。

現(xiàn)在,-1直接在這樣的比較中使用會帶來麻煩。您應(yīng)該(視std::string情況而定)確保此值有一個可訪問的名稱,以確保其特殊含義。不幸的是,C ++類型系統(tǒng)還不夠嚴(yán)格,無法防止用戶用腳射擊自己,但是至少堅持記錄的最佳實踐的用戶不會想到做不同的事情。


查看完整回答
反對 回復(fù) 2019-11-20
?
慕村225694

TA貢獻1880條經(jīng)驗 獲得超4個贊

在嘗試思考可能會出問題的方式之后,我意識到調(diào)用函數(shù)可能會隱式地將返回值強制轉(zhuǎn)換為更大的類型(即,將unsigned int轉(zhuǎn)換為unsigned long long)。然后檢查該值== -1是否為假。

比較安全的選擇是顯式使用size_t.max作為前哨值。我總是對在有符號和無符號類型之間進行轉(zhuǎn)換感到不舒服。有時我認(rèn)為更合理的方法是使所有內(nèi)容都簽名(就像Java一樣)。


查看完整回答
反對 回復(fù) 2019-11-20
  • 3 回答
  • 0 關(guān)注
  • 789 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號