在正确安全地转换为64位后,如何处理占用大小的Windows API调用?
例如:
来自winsock
int send(
_In_ SOCKET s,
_In_ const char *buf,
_In_ int len,
_In_ int flags
);
或
int MultiByteToWideChar(
_In_ UINT CodePage,
_In_ DWORD dwFlags,
_In_ LPCSTR lpMultiByteStr,
_In_ int cbMultiByte,
_Out_opt_ LPWSTR lpWideCharStr,
_In_ int cchWideChar
);
自然会调用some_container :: size()来返回size_t。 size_t使用64位时,msvc编译器是无符号长long。
有人可以施放,但这不安全,因为理论上容器的大小可能比int的边界大。
一个人可以检查然后再进行演员,但这是人们在实践中真正做的事情吗?这对正在转换的大型项目有很多工作要做。查找和替换不会在那个上工作。
你做什么的?我有一种感觉,大多数人都会忽略它,但这似乎不是一件好事。我喜欢一个没有警告的漂亮版本。
为什么他们没有这些功能的64位版本,类似于各种功能的广泛和多字节版本?