我有这个c ++示例代码:
void test()
{
rapidjson::Document doc;
doc.SetObject();
const std::string source = "The quick brown fox jumps over the lazy dog";
rapidjson::Value source_val;
source_val.SetString( source.c_str(), source.length(), doc.GetAllocator() );
}
在编译时,在x64平台上,我收到此警告:
警告C4267:'参数':从
size_t
转换为rapidjson::SizeType
,可能会丢失数据
如何正确地从字符串的长度(size_t
)转换为rapidjson SizeType?
答案 0 :(得分:5)
RapidJSON即使在64位平台上也使用32位数组/字符串索引, 而不是使用
size_t
。用户可以通过定义覆盖SizeType RAPIDJSON_NO_SIZETYPEDEFINE
答案 1 :(得分:1)
如何正确地从字符串的长度(
size_t
)转换为rapidjson SizeType?
您已使用的隐式转化是从size_t
转换为rapidjson::SizeType
的正确方式。
警告并不一定意味着您的程序不正确。
在这种情况下,它只是警告rapidjson::SizeType
无法代表size_t
所代表的所有值。因此,如果您尝试使用比rapidjson::SizeType
表示的字符串更长的字符串,则会出现意外行为。
如果您确实想要支持此类字符串,则必须覆盖rapidjson::SizeType
,如其他答案中的文档中所述。
我可以摆脱这个警告吗?
显式强制转换通常会使编译器误认为您没有意外转换:static_cast<rapidjson::SizeType>(source.length())