QJsonValueRef vs. QJsonValue

QJsonValueRef vs. QJsonValue

本文关键字:QJsonValue vs QJsonValueRef      更新时间:2023-10-16

在Qt的JSON实现中,在QJsonObject类中,有两个操作符的实现(文档在这里):

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

首先,返回QJsonValueRef与返回QJsonValue相比有什么优势?其次,如果我只说root['time'],其中rootQJsonObject,将返回哪个值?

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

返回key值的引用。

返回值的类型是QJsonValueRef, QJsonArray和QJsonObject的辅助类。当您获得QJsonValueRef类型的对象时,您可以将其作为对QJsonValue的引用来使用。如果对其进行赋值,则赋值将应用于QJsonArray或QJsonObject中获得引用的元素。

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

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

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

用于可变的,也就是。非const对象,可以同时调用这两个版本,但默认情况下会调用第二个版本。然而,使用一些const强制转换,这可以改变。