QSettings: overload value() instead of using a default argument
... of non-trivial type, which needs to be constructed every time the
function is called, no matter whether the user supplies one or not.
Effects on Linux AMD64 O2 C++20 tst_qsettings builds, as an example
heavy-duty QSettings::value() user:
GCC 11.2 libstdc++ (TEXT -= 4.6%):
text data bss dec hex filename
662317 10952 2824 676093 a50fd tst_qsettings-00-baseline
631849 10960 2824 645633 9da01 tst_qsettings-01-qvariant
Clang 10.0.0 libc++ (TEXT -= 2.8%)
text data bss dec hex filename
808448 10616 2832 821896 c8a88 tst_qsettings-00-baseline
785890 10624 2832 799346 c3272 tst_qsettings-01-qvariant
Pick-to: 6.3
Task-number: QTBUG-98117
Change-Id: I7366f063e3ec34c040fd35ffd274e8ed5a722132
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
bb10
parent
d49f5752a5
commit
29b18a0179
|
|
@ -3254,6 +3254,9 @@ bool QSettings::event(QEvent *event)
|
|||
#endif
|
||||
|
||||
/*!
|
||||
\fn QSettings::value(const QString &key) const
|
||||
\fn QSettings::value(const QString &key, const QVariant &defaultValue) const
|
||||
|
||||
Returns the value for setting \a key. If the setting doesn't
|
||||
exist, returns \a defaultValue.
|
||||
|
||||
|
|
@ -3271,14 +3274,29 @@ bool QSettings::event(QEvent *event)
|
|||
|
||||
\sa setValue(), contains(), remove()
|
||||
*/
|
||||
QVariant QSettings::value(const QString &key) const
|
||||
{
|
||||
Q_D(const QSettings);
|
||||
return d->value(key, nullptr);
|
||||
}
|
||||
|
||||
QVariant QSettings::value(const QString &key, const QVariant &defaultValue) const
|
||||
{
|
||||
Q_D(const QSettings);
|
||||
return d->value(key, &defaultValue);
|
||||
}
|
||||
|
||||
QVariant QSettingsPrivate::value(const QString &key, const QVariant *defaultValue) const
|
||||
{
|
||||
if (key.isEmpty()) {
|
||||
qWarning("QSettings::value: Empty key passed");
|
||||
return QVariant();
|
||||
}
|
||||
return d->get(d->actualKey(key)).value_or(defaultValue);
|
||||
if (std::optional r = get(actualKey(key)))
|
||||
return std::move(*r);
|
||||
if (defaultValue)
|
||||
return *defaultValue;
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -163,7 +163,8 @@ public:
|
|||
bool isWritable() const;
|
||||
|
||||
void setValue(const QString &key, const QVariant &value);
|
||||
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
|
||||
QVariant value(const QString &key, const QVariant &defaultValue) const;
|
||||
QVariant value(const QString &key) const;
|
||||
|
||||
void remove(const QString &key);
|
||||
bool contains(const QString &key) const;
|
||||
|
|
|
|||
|
|
@ -208,6 +208,7 @@ public:
|
|||
virtual bool isWritable() const = 0;
|
||||
virtual QString fileName() const = 0;
|
||||
|
||||
QVariant value(const QString &key, const QVariant *defaultValue) const;
|
||||
QString actualKey(const QString &key) const;
|
||||
void beginGroupOrArray(const QSettingsGroup &group);
|
||||
void setStatus(QSettings::Status status) const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue