亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

我應該在for循環中使用std :: size_t還是int?

我應該在for循環中使用std :: size_t還是int?

C++
慕村225694 2020-02-04 15:26:58
我只是想知道我應該使用std::size_t循環和東西而不是int?例如:#include <cstdint>int main(){    for (std::size_t i = 0; i < 10; ++i) {        // std::size_t OK here? Or should I use, say, unsigned int instead?    }}通常,關于何時使用的最佳實踐是什么std::size_t?
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

一個好的經驗法則是,您需要在循環條件下將其與自然存在的事物進行比較std::size_t。

std::size_t是任何sizeof表達式的類型,并保證能夠表達C ++中任何對象(包括任何數組)的最大大小。通過擴展,它也保證對于任何數組索引都足夠大,因此它是數組上逐個索引循環的自然類型。

如果您只是在計算一個數字,那么使用保存該數字的變量類型或一個intunsigned int(如果足夠大)的類型可能會更自然,因為這些對于機器而言應該是自然大小。


查看完整回答
反對 回復 2020-02-04
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

size_tsizeof運算符的結果類型。

使用size_t變量數組中的模型的大小或指數。size_t傳達了語義:您立即知道它代表一個以字節為單位的大小或一個索引,而不僅僅是另一個整數。

同樣,使用size_t字節表示大小有助于使代碼具有可移植性。


查看完整回答
反對 回復 2020-02-04
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

該size_t類型用于指定內容的大小,因此很自然地使用它,例如,獲取字符串的長度然后處理每個字符:


for (size_t i = 0, max = strlen (str); i < max; i++)

    doSomethingWith (str[i]);

你也必須注意,當然邊界條件,因為它是一個無符號類型。頂端的邊界通常并不那么重要,因為最大值通常很大(盡管有可能到達那里)。大多數人只是將an int用于此類事情,因為他們很少擁有足夠大以超過該能力的結構或數組int。


但是請注意以下事項:


for (size_t i = strlen (str) - 1; i >= 0; i--)

由于無符號值的包裝行為,這將導致無限循環(盡管我已經看到編譯器對此提出警告)。也可以通過以下方式緩解此問題(稍難理解,但至少可以避免包裝問題):


for (size_t i = strlen (str); i-- > 0; )

通過將減量轉換為延續條件的檢查后副作用,這將對減量前的值進行連續性檢查,但仍在循環內使用減量值(這就是循環從而len .. 1不是從處運行的原因len-1 .. 0)。


查看完整回答
反對 回復 2020-02-04
  • 3 回答
  • 0 關注
  • 1717 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號