2016-05-09 2 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?

ответ

5

Per the documentation:

RapidJSON использует 32-битовый массив/строковые индексы даже на 64-битных платформах , вместо size_t. Пользователи могут переопределить SizeType, указав RAPIDJSON_NO_SIZETYPEDEFINE.

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 - это решение, но я считаю, что документация fastjson для определения RAPIDJSON_NO_SIZETYPEDEFINE более элегантна. Спасибо за ваш ответ. – mtb

+0

Просто помните, что на самом деле использование столь длинных строк сделает xml неповторимым в 32-битных системах. – user2079303

Смежные вопросы