QJsonValueRef与QJsonValue的区别

9
在Qt的JSON实现中,QJsonObject类中有两个运算符的实现(文档在这里):
QJsonValue QJsonObject::operator[](const QString & key) const;
QJsonValueRef QJsonObject::operator[](const QString & key);

首先,相比于返回QJsonValue,返回QJsonValueRef的优势是什么?其次,如果我只是说类似root['time']这样的话,将返回哪个值,其中root是一个QJsonObject

1个回答

4
您在提交问题时应避免问超过一个问题。 话虽如此,以下是您问题的答案:
返回键的值的引用。
返回值的类型为QJsonValueRef,这是QJsonArray和QJsonObject的辅助类。当您获取QJsonValueRef类型的对象时,可以将其用作对QJsonValue的引用。如果进行赋值,则该赋值将应用于从中获取引用的QJsonArray或QJsonObject中的元素。
这意味着,您可以在不在代码中明确创建中间对象的情况下对返回值调用方法,就像C ++中的引用一样。
至于第二个子问题,它取决于根对象是什么。如果它是常量对象,则无法调用第二个非常量版本,因为这会违反常量正确性。请注意,这里的const关键字是末尾的。
> QJsonValue QJsonObject::operator[](const QString & key) const;
                                                          ^^^^^

对于一个可变的对象,也就是非const对象,你可以调用两种版本的函数,但默认情况下会调用第二个版本。不过通过一些const强制转换,可以改变这种情况。


只是为了确认,const 强制转换会放在 root 周围,对吗?像这样 ((const)root)['time'] - saiarcot895
1
@saiarcot895:C++有专门的const cast。 - László Papp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接