我明白了:
warning C4244: 'initializing' : conversion from 'uintmax_t' to 'unsigned int', possible loss of data
在:
boost::shared_array<char> buffer( new char[file->size]);
……然后是这个:
warning C4244: 'argument' : conversion from 'uintmax_t' to 'size_t', possible loss of data
在:
boost::asio::write(*socket, boost::asio::buffer(buffer.get(), file->size));
我应该害怕还是没事?
最佳答案
可能 file->size
是 uintmax_t
类型,它大于 operator new[]
的 size_t
> 取数组大小。通常第一个可以是 64 位整数,而第二个只能是 32 位。
实际上,当您尝试处理超过 4GB 的文件时,这会导致问题,因为 size_t
无法表示这么大的字节数。如果您只希望处理较小的文件,其中 size_t
足够大以存储文件大小,则不会有问题。
关于c++ - 'uintmax_t'到 'size_t'和 'unsigned int'转换丢失的数据是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706171/