3 回答

TA貢獻1825條經(jīng)驗 獲得超4個贊
一個好的經(jīng)驗法則是,您需要在循環(huán)條件下將其與自然存在的事物進行比較std::size_t
。
std::size_t
是任何sizeof
表達式的類型,并保證能夠表達C ++中任何對象(包括任何數(shù)組)的最大大小。通過擴展,它也保證對于任何數(shù)組索引都足夠大,因此它是數(shù)組上逐個索引循環(huán)的自然類型。
如果您只是在計算一個數(shù)字,那么使用保存該數(shù)字的變量類型或一個int
或unsigned int
(如果足夠大)的類型可能會更自然,因為這些對于機器而言應該是自然大小。

TA貢獻1851條經(jīng)驗 獲得超4個贊
size_t
是sizeof
運算符的結果類型。
使用size_t
變量數(shù)組中的模型的大小或指數(shù)。size_t
傳達了語義:您立即知道它代表一個以字節(jié)為單位的大小或一個索引,而不僅僅是另一個整數(shù)。
同樣,使用size_t
字節(jié)表示大小有助于使代碼具有可移植性。

TA貢獻1863條經(jīng)驗 獲得超2個贊
該size_t類型用于指定內(nèi)容的大小,因此很自然地使用它,例如,獲取字符串的長度然后處理每個字符:
for (size_t i = 0, max = strlen (str); i < max; i++)
doSomethingWith (str[i]);
你也必須注意,當然邊界條件,因為它是一個無符號類型。頂端的邊界通常并不那么重要,因為最大值通常很大(盡管有可能到達那里)。大多數(shù)人只是將an int用于此類事情,因為他們很少擁有足夠大以超過該能力的結構或數(shù)組int。
但是請注意以下事項:
for (size_t i = strlen (str) - 1; i >= 0; i--)
由于無符號值的包裝行為,這將導致無限循環(huán)(盡管我已經(jīng)看到編譯器對此提出警告)。也可以通過以下方式緩解此問題(稍難理解,但至少可以避免包裝問題):
for (size_t i = strlen (str); i-- > 0; )
通過將減量轉換為延續(xù)條件的檢查后副作用,這將對減量前的值進行連續(xù)性檢查,但仍在循環(huán)內(nèi)使用減量值(這就是循環(huán)從而len .. 1不是從處運行的原因len-1 .. 0)。
- 3 回答
- 0 關注
- 1700 瀏覽
添加回答
舉報