2016-05-09 53 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

相關問題