2016-05-09 27 views
4

我有这样的C++代码示例:转换,从 '为size_t' 到 'rapidjson ::的SizeType'

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?

回答

1

如何正确地从字符串的长度(size_t)转换为rapidjson SizeType?

您已经使用的隐式转换是将size_t转换为rapidjson::SizeType的正确方法。

警告并不一定意味着您的程序不正确。

在这种情况下,它只是警告rapidjson::SizeType不能表示size_t可表示的所有值。因此,如果尝试使用比rapidjson::SizeType代表的字符串长的字符串,则会出现意外的行为。

如果您确实想要支持这样的字符串,那么您必须覆盖rapidjson::SizeType,如其他答案的文档中所述。

我可以摆脱这个警告吗?

有明确的转换通常是说服你不是偶然转换编译:static_cast<rapidjson::SizeType>(source.length())

+0

我知道一个警告不是错误,但我可以摆脱这个警告吗? – mtb

+0

是的,static_cast是一个解决方案,但我认为定义RAPIDJSON_NO_SIZETYPEDEFINE的rapidjson文档更加优雅。谢谢您的回答。 – mtb

+0

请记住,实际上使用这么长的字符串将使xml在32位系统上无法解析。 – user2079303

相关问题