在Qt的JSON实现中,在QJsonObject
类中,有两个运算符实现(文档here):
QJsonValue QJsonObject::operator[](const QString & key) const;
QJsonValueRef QJsonObject::operator[](const QString & key);
首先,返回QJsonValueRef
而不是返回QJsonValue
,这有什么好处?其次,如果我刚才说root['time']
,root
是QJsonObject
,那么会返回哪个值?
答案 0 :(得分:2)
您应避免在提交的问题中询问多个问题。话虽如此,以下是您的问题的答案:
返回对key值的引用。
返回值的类型为QJsonValueRef,它是QJsonArray和QJsonObject的辅助类。当你得到一个QJsonValueRef类型的对象时,你可以使用它,就像它是对QJsonValue的引用一样。如果赋值给它,则赋值将应用于QJsonArray或QJsonObject中的元素,并从中获取引用。
这意味着,您可以在返回值上调用方法,而无需在代码中显式创建临时对象,就像引用在C ++中的工作方式一样。
至于第二个子问题,它取决于根对象是什么。如果它是一个const对象,则无法调用第二个非const版本,因为这会违反const正确性。请注意最后的const:
> QJsonValue QJsonObject::operator[](const QString & key) const;
^^^^^
对于一个可变的,又名。非const对象,你可以调用它们,但默认情况下会调用第二个版本。但是,通过一些const转换,可以改变它。