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 388646f3f3..ec17c0e15a 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 7b174cf15b..3a57b383dc 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 96f09bf89b..ca949b9b32 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 39a05883c5..d8d8cd3425 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