有人可以解釋當size_t或任何其他類型標識符被括在圓括號中時會發生什麼。我知道這是舊的typecast語法,但在這種情況下,我不關注發生的事情。這段代碼在做什麼? (size_t)-1
我已經看到了對於作爲定義的類型的最大尺寸:
size_t max_size = (size_t)-1
有人可以解釋當size_t或任何其他類型標識符被括在圓括號中時會發生什麼。我知道這是舊的typecast語法,但在這種情況下,我不關注發生的事情。這段代碼在做什麼? (size_t)-1
我已經看到了對於作爲定義的類型的最大尺寸:
size_t max_size = (size_t)-1
此代碼(不必要的)投射到-1
size_t
。最可能的意圖是在該系統上獲得最大可能值size_t
。
儘管這段代碼沒有未定義行爲,這個代碼是醜陋的 - 在C++中,你應該使用std::numeric_limits<size_t>::max()
和C使用SIZE_MAX
宏獲得最大size_t
價值的完全是一個目的。
這段代碼有明確的行爲。你可能不喜歡它,但它受到標準的制裁。 (事實上,C和C++標準都是。)而在C++(OP標籤)中,你應該使用'std :: numeric_limits
(size_t)-1
事實上是size_t(-1)
相當於另請參見以下問題c cast syntax styles
一些庫方法故意返回(size_t)(-1)
以指示錯誤狀態。例如,the iconv method from the GNU libiconv library。我假設這些函數爲什麼不返回ssize_t
(帶符號)返回值,這將允許您直接檢查-1,這有一些很好的理由。
這是一個C風格的演員。它將'-1'轉換爲'size_t',這可能會產生一個非常大的數字。 – juanchopanza
@juanchopanza:準確地說,size_t'可以代表的最大數字:) – 2013-10-07 20:38:25
演員陣容是不必要的。 'size_t max_size = -1;'做同樣的事情。 –