Qjsonvalueref Vs. Qjsonvalue

Qjsonvalueref Vs. Qjsonvalue

In Qt's JSON implementation, in the QJsonObject class, there are two implementations of an operator (documentation here):

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

First off, what is the advantage here by returning QJsonValueRef as opposed to returning QJsonValue? Second, which value would be returned if I just said something like root['time'], where root is a QJsonObject?

1 Answer

You should avoid asking more than one question in a submitted question. That being said, here are the answers for your questions:

Returns a reference to the value for key.

The return value is of type QJsonValueRef, a helper class for QJsonArray and QJsonObject. When you get an object of type QJsonValueRef, you can use it as if it were a reference to a QJsonValue. If you assign to it, the assignment will apply to the element in the QJsonArray or QJsonObject from which you got the reference.

This means, you could call a method on the return value without having an interim object created explicitly by you in the code, just like how references work in C++.

As for the second sub-question, it depends on what the root object is. If it is a const object, the second, the non-const version, could not be called since that would violate the const correctness. Note the const here at the end:

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

For a mutable, aka. non-const object, you could call both, but by default the second version would be called. With some const casting, this could be changed, however.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.