QJsonValueRef vs. QJsonValue

时间:2014-07-12 01:59:16

标签: c++ qt qt5 qtcore

在Qt的JSON实现中,在QJsonObject类中,有两个运算符实现(文档here):

QJsonValue QJsonObject::operator[](const QString & key) const;
QJsonValueRef QJsonObject::operator[](const QString & key);

首先,返回QJsonValueRef而不是返回QJsonValue,这有什么好处?其次,如果我刚才说root['time']rootQJsonObject,那么会返回哪个值?

1 个答案:

答案 0 :(得分:2)

您应避免在提交的问题中询问多个问题。话虽如此,以下是您的问题的答案:

  

返回对key值的引用。

     

返回值的类型为QJsonValueRef,它是QJsonArray和QJsonObject的辅助类。当你得到一个QJsonValueRef类型的对象时,你可以使用它,就像它是对QJsonValue的引用一样。如果赋值给它,则赋值将应用于QJsonArray或QJsonObject中的元素,并从中获取引用。

这意味着,您可以在返回值上调用方法,而无需在代码中显式创建临时对象,就像引用在C ++中的工作方式一样。

至于第二个子问题,它取决于根对象是什么。如果它是一个const对象,则无法调用第二个非const版本,因为这会违反const正确性。请注意最后的const:

> QJsonValue QJsonObject::operator[](const QString & key) const;
                                                          ^^^^^

对于一个可变的,又名。非const对象,你可以调用它们,但默认情况下会调用第二个版本。但是,通过一些const转换,可以改变它。