64位可移植性问题

Kon*_*rad 1 64-bit size-t visual-c++

所有这些都源于我在尝试以下行时编写了一条编译器警告消息(C4267):

const unsigned int nSize = m_vecSomeVec.size();
Run Code Online (Sandbox Code Playgroud)

size()返回size_t虽然typedef为unsigned int,但实际上并不是unsigned int.我认为这与64位可移植性问题有关,但有人可以为我解释一下吗?(我不只是想禁用64位警告.)

Joh*_*itb 8

这取决于实施.std::size_t例如,具有最小的所需尺寸.但没有上限.要避免这种情况,请始终使用正确的typedef:

const std::vector<T>::size_type nSize = m_vecSomeVec.size();
Run Code Online (Sandbox Code Playgroud)

那么你将永远保持安全.