QString: fix documentation of NUL-termination of unicode(), data(), constData()

(or lack thereof).

* `QString::utf16()` reallocates if `*this` has been constructed using
  `fromRawData()`.

* `QString::data()` ensures a writable string, so will detach from raw
  data.

* `QString::unicode()`, `constData()`, and `data() const` do not. They
  just return `QStringData::data()`, which may point to raw,
  non-NUL-terminated data.

These functions can therefore not possibly have the same behavior, but
were documented the same.

Fix.

Also drop the discussion of operator[](size()), as that, too, was not
correct, and anyone who indexes with op[] beyond size() - 1 should not
rely on proper behavior.

[ChangeLog][QtCore][QString] QString::unicode(), constData() and
`data() const` do not return a NUL-terminated string. This was true
before, but the documentation claimed the opposite.

Change-Id: I1437f57cd02bdf80264e8559608b46aa749c23a8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2017-12-11 12:46:11 +01:00
parent 91996d4ec4
commit 27aacfb61e
2 changed files with 20 additions and 13 deletions

View File

@ -733,7 +733,6 @@ void Widget::sizeFunction()
int n = str.size(); // n == 5 int n = str.size(); // n == 5
str.data()[0]; // returns 'W' str.data()[0]; // returns 'W'
str.data()[4]; // returns 'd' str.data()[4]; // returns 'd'
str.data()[5]; // returns '\0'
//! [58] //! [58]
} }

View File

@ -5138,14 +5138,9 @@ QString& QString::fill(QChar ch, int size)
Returns the number of characters in this string. Returns the number of characters in this string.
The last character in the string is at position size() - 1. In The last character in the string is at position size() - 1.
addition, QString ensures that the character at position size()
is always '\\0', so that you can use the return value of data()
and constData() as arguments to functions that expect
'\\0'-terminated strings.
Example: Example:
\snippet qstring/main.cpp 58 \snippet qstring/main.cpp 58
\sa isEmpty(), resize() \sa isEmpty(), resize()
@ -5674,10 +5669,13 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1,
/*! /*!
\fn const QChar *QString::unicode() const \fn const QChar *QString::unicode() const
Returns a '\\0'-terminated Unicode representation of the string. Returns a Unicode representation of the string.
The result remains valid until the string is modified. The result remains valid until the string is modified.
\sa utf16() \note The returned string may not be '\\0'-terminated.
Use size() to determine the length of the array.
\sa utf16(), fromRawData()
*/ */
/*! /*!
@ -8077,7 +8075,10 @@ bool QString::isRightToLeft() const
Returns a pointer to the data stored in the QString. The pointer Returns a pointer to the data stored in the QString. The pointer
can be used to access and modify the characters that compose the can be used to access and modify the characters that compose the
string. For convenience, the data is '\\0'-terminated. string.
Unlike constData() and unicode(), the returned data is always
'\\0'-terminated.
Example: Example:
@ -8093,18 +8094,25 @@ bool QString::isRightToLeft() const
/*! \fn const QChar *QString::data() const /*! \fn const QChar *QString::data() const
\overload \overload
\note The returned string may not be '\\0'-terminated.
Use size() to determine the length of the array.
\sa fromRawData()
*/ */
/*! \fn const QChar *QString::constData() const /*! \fn const QChar *QString::constData() const
Returns a pointer to the data stored in the QString. The pointer Returns a pointer to the data stored in the QString. The pointer
can be used to access the characters that compose the string. For can be used to access the characters that compose the string.
convenience, the data is '\\0'-terminated.
Note that the pointer remains valid only as long as the string is Note that the pointer remains valid only as long as the string is
not modified. not modified.
\sa data(), operator[]() \note The returned string may not be '\\0'-terminated.
Use size() to determine the length of the array.
\sa data(), operator[](), fromRawData()
*/ */
/*! \fn void QString::push_front(const QString &other) /*! \fn void QString::push_front(const QString &other)