我现在一直在Qt中使用JSON,并一直按照示例中所示进行操作。不过,我想知道直接将值分配给QJsonValueRef与在向QJsonObject添加项时使用QJsonObject::insert
是否有区别,也就是说这两行代码:
json["name"] = mName;
json.insert("name", mName);
有什么不同之处,还是只是编程风格的问题?
我现在一直在Qt中使用JSON,并一直按照示例中所示进行操作。不过,我想知道直接将值分配给QJsonValueRef与在向QJsonObject添加项时使用QJsonObject::insert
是否有区别,也就是说这两行代码:
json["name"] = mName;
json.insert("name", mName);
有什么不同之处,还是只是编程风格的问题?
operator[](const QString &key)
返回指向 key
所指向的 JSON value
的引用(即不包括 key
),而 insert
方法将添加/替换值,然后返回一个指向该值的 iterator
(即我们可以通过迭代器访问 key
和 value
)。因此,使用 operator[]
只能访问特定值的引用,而使用 insert
则可以获得一个可用于访问 JSON 对象中元素(键、值)本身及其前/后(如果有)元素的 iterator
。operator[](const QString &key)
中,根据 源代码,首先会搜索由 key
指向的值,如果存在,则返回 引用。如果该值不存在,则调用 insert
并将空的 QJSonValue() 作为第二个参数,然后返回对此新值的引用。由于您对 operator[]
的调用后面跟着值修改,因此这两个操作的效果将相同,即将 mValue
分配给具有键 "name"
的元素。
std::map
类似,那么调用insert
不会替换现有键值对的值,而使用索引运算符则会。 - Captain Obvlious