這一切都源於我在編譯器警告消息(C4267)戳嘗試下面一行時:64位可移植性問題
const unsigned int nSize = m_vecSomeVec.size();
size()
返回這雖然typedef定義到unsigned int的一個爲size_t,實際上不是一個unsigned int。我相信這與64位可移植性問題有關,但是有人可以解釋它對我更好一些嗎? (我不只是想禁用64位警告。)
這一切都源於我在編譯器警告消息(C4267)戳嘗試下面一行時:64位可移植性問題
const unsigned int nSize = m_vecSomeVec.size();
size()
返回這雖然typedef定義到unsigned int的一個爲size_t,實際上不是一個unsigned int。我相信這與64位可移植性問題有關,但是有人可以解釋它對我更好一些嗎? (我不只是想禁用64位警告。)
這取決於實施。例如,std::size_t
具有最小的所需尺寸。但沒有上限。爲避免這些情況,請始終使用適當的typedef:
const std::vector<T>::size_type nSize = m_vecSomeVec.size();
您將始終保持安全。
True - size_t對於矢量
如果size_t
是typedef:編輯爲unsigned int
,那麼當然這是一個unsigned int
,在您的特定平臺上。但它是抽象的,所以你不能依賴它總是是一個unsigned int
,它可能在其他平臺上更大。
可能它並沒有做得更大,因爲這樣做會花費太多,其中超過2^32項目的向量不是很常見。
編譯爲64位平臺時,size_t
將是64位類型。因此,當啓用「檢測64位可移植性問題」時,Visual Studio會給出關於將size_t
s分配給int
的警告。
Visual C++通過__w64
令牌獲取關於size_t
的此信息,例如, __w64 unsigned int
。
參見下面的鏈接以獲得更多關於64位移植問題.. http://www.viva64.com/en/a/0065/
根據編譯器,int
可以是在64位的地32位。
SO你爲什麼不用nSize的size_t? C++非常敏感/嚴格(按設計)。所以總是使用正確的類型。 – 2008-12-04 18:05:49