从'size_t'转换为'rapidjson :: SizeType'

时间:2016-05-09 07:23:26

标签: c++ c++11 type-conversion size-t rapidjson

我有这个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?

2 个答案:

答案 0 :(得分:5)

Per the documentation

  

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())