在Qt的JSON实现中,在QJsonObject
类中,有两个操作符的实现(文档在这里):
QJsonValue QJsonObject::operator[](const QString & key) const;
QJsonValueRef QJsonObject::operator[](const QString & key);
首先,返回QJsonValueRef
与返回QJsonValue
相比有什么优势?其次,如果我只说root['time']
,其中root
是QJsonObject
,将返回哪个值?
你应该避免在提交的问题中提出多个问题。话虽如此,以下是你的问题的答案:
返回key值的引用。
返回值的类型是QJsonValueRef, QJsonArray和QJsonObject的辅助类。当您获得QJsonValueRef类型的对象时,您可以将其作为对QJsonValue的引用来使用。如果对其进行赋值,则赋值将应用于QJsonArray或QJsonObject中获得引用的元素。
这意味着,您可以在返回值上调用方法,而无需在代码中显式创建临时对象,就像c++中的引用工作方式一样。
至于第二个子问题,它取决于根对象是什么。如果它是const对象,则不能调用第二个非const版本,因为这会违反const正确性。注意末尾的const:
> QJsonValue QJsonObject::operator[](const QString & key) const;
^^^^^
用于可变的,也就是。非const对象,可以同时调用这两个版本,但默认情况下会调用第二个版本。然而,使用一些const强制转换,这可以改变。