From 5d41ec46e92bbad98df32a8a6a849dbad165631e Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 30 Nov 2022 16:22:00 +0100 Subject: [PATCH] QString/QByteArray: de-pessimize op+ [1/2]: non-const return types const return types prevent move semantics, so drop the const. This is BC, because the operators are all inline free functions. In particular, they're not exported (MSVC mangles the return type). [ChangeLog][QtCore][QString/QByteArray] operator+ no longer returns a const object, enabling move-semantics on the return value, but also hidden detaches. Change-Id: Ifc18f6b1df1e3840f57b2521949dbade8e11fd76 Reviewed-by: Thiago Macieira --- src/corelib/text/qbytearray.cpp | 10 +++++----- src/corelib/text/qbytearray.h | 10 +++++----- src/corelib/text/qstring.cpp | 6 +++--- src/corelib/text/qstring.h | 14 +++++++------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp index 388646f3f3f..ec17c0e15ae 100644 --- a/src/corelib/text/qbytearray.cpp +++ b/src/corelib/text/qbytearray.cpp @@ -3485,7 +3485,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba) \sa QByteArray::compare() */ -/*! \fn const QByteArray operator+(const QByteArray &a1, const QByteArray &a2) +/*! \fn QByteArray operator+(const QByteArray &a1, const QByteArray &a2) \relates QByteArray Returns a byte array that is the result of concatenating byte @@ -3494,7 +3494,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba) \sa QByteArray::operator+=() */ -/*! \fn const QByteArray operator+(const QByteArray &a1, const char *a2) +/*! \fn QByteArray operator+(const QByteArray &a1, const char *a2) \relates QByteArray \overload @@ -3503,7 +3503,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba) and '\\0'-terminated string \a a2. */ -/*! \fn const QByteArray operator+(const QByteArray &a1, char a2) +/*! \fn QByteArray operator+(const QByteArray &a1, char a2) \relates QByteArray \overload @@ -3512,7 +3512,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba) array \a a1 and byte \a a2. */ -/*! \fn const QByteArray operator+(const char *a1, const QByteArray &a2) +/*! \fn QByteArray operator+(const char *a1, const QByteArray &a2) \relates QByteArray \overload @@ -3521,7 +3521,7 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba) string \a a1 and byte array \a a2. */ -/*! \fn const QByteArray operator+(char a1, const QByteArray &a2) +/*! \fn QByteArray operator+(char a1, const QByteArray &a2) \relates QByteArray \overload diff --git a/src/corelib/text/qbytearray.h b/src/corelib/text/qbytearray.h index 7b174cf15bf..3a57b383dc5 100644 --- a/src/corelib/text/qbytearray.h +++ b/src/corelib/text/qbytearray.h @@ -547,15 +547,15 @@ inline int QByteArray::compare(QByteArrayView a, Qt::CaseSensitivity cs) const n qstrnicmp(data(), size(), a.data(), a.size()); } #if !defined(QT_USE_QSTRINGBUILDER) -inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2) +inline QByteArray operator+(const QByteArray &a1, const QByteArray &a2) { return QByteArray(a1) += a2; } -inline const QByteArray operator+(const QByteArray &a1, const char *a2) +inline QByteArray operator+(const QByteArray &a1, const char *a2) { return QByteArray(a1) += a2; } -inline const QByteArray operator+(const QByteArray &a1, char a2) +inline QByteArray operator+(const QByteArray &a1, char a2) { return QByteArray(a1) += a2; } -inline const QByteArray operator+(const char *a1, const QByteArray &a2) +inline QByteArray operator+(const char *a1, const QByteArray &a2) { return QByteArray(a1) += a2; } -inline const QByteArray operator+(char a1, const QByteArray &a2) +inline QByteArray operator+(char a1, const QByteArray &a2) { return QByteArray(&a1, 1) += a2; } #endif // QT_USE_QSTRINGBUILDER diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 96f09bf89bc..ca949b9b320 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -6276,7 +6276,7 @@ QString& QString::fill(QChar ch, qsizetype size) */ /*! - \fn const QString operator+(const QString &s1, const QString &s2) + \fn QString operator+(const QString &s1, const QString &s2) \relates QString Returns a string which is the result of concatenating \a s1 and \a @@ -6284,7 +6284,7 @@ QString& QString::fill(QChar ch, qsizetype size) */ /*! - \fn const QString operator+(const QString &s1, const char *s2) + \fn QString operator+(const QString &s1, const char *s2) \relates QString Returns a string which is the result of concatenating \a s1 and \a @@ -6295,7 +6295,7 @@ QString& QString::fill(QChar ch, qsizetype size) */ /*! - \fn const QString operator+(const char *s1, const QString &s2) + \fn QString operator+(const char *s1, const QString &s2) \relates QString Returns a string which is the result of concatenating \a s1 and \a diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 39a05883c55..d8d8cd34254 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -1464,20 +1464,20 @@ inline bool QByteArray::operator>=(const QString &s) const #endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII) #if !defined(QT_USE_FAST_OPERATOR_PLUS) && !defined(QT_USE_QSTRINGBUILDER) -inline const QString operator+(const QString &s1, const QString &s2) +inline QString operator+(const QString &s1, const QString &s2) { QString t(s1); t += s2; return t; } -inline const QString operator+(const QString &s1, QChar s2) +inline QString operator+(const QString &s1, QChar s2) { QString t(s1); t += s2; return t; } -inline const QString operator+(QChar s1, const QString &s2) +inline QString operator+(QChar s1, const QString &s2) { QString t(s1); t += s2; return t; } # if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII) -QT_ASCII_CAST_WARN inline const QString operator+(const QString &s1, const char *s2) +QT_ASCII_CAST_WARN inline QString operator+(const QString &s1, const char *s2) { QString t(s1); t += QString::fromUtf8(s2); return t; } -QT_ASCII_CAST_WARN inline const QString operator+(const char *s1, const QString &s2) +QT_ASCII_CAST_WARN inline QString operator+(const char *s1, const QString &s2) { QString t = QString::fromUtf8(s1); t += s2; return t; } -QT_ASCII_CAST_WARN inline const QString operator+(const QByteArray &ba, const QString &s) +QT_ASCII_CAST_WARN inline QString operator+(const QByteArray &ba, const QString &s) { QString t = QString::fromUtf8(ba); t += s; return t; } -QT_ASCII_CAST_WARN inline const QString operator+(const QString &s, const QByteArray &ba) +QT_ASCII_CAST_WARN inline QString operator+(const QString &s, const QByteArray &ba) { QString t(s); t += QString::fromUtf8(ba); return t; } # endif // QT_NO_CAST_FROM_ASCII #endif // QT_USE_QSTRINGBUILDER