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
str.data()[0]; // returns 'W'
str.data()[4]; // returns 'd'
str.data()[5]; // returns '\0'
//! [58]
}

View File

@ -5138,14 +5138,9 @@ QString& QString::fill(QChar ch, int size)
Returns the number of characters in this string.
The last character in the string is at position size() - 1. In
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.
The last character in the string is at position size() - 1.
Example:
\snippet qstring/main.cpp 58
\sa isEmpty(), resize()
@ -5674,10 +5669,13 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1,
/*!
\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.
\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
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:
@ -8093,18 +8094,25 @@ bool QString::isRightToLeft() const
/*! \fn const QChar *QString::data() const
\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
Returns a pointer to the data stored in the QString. The pointer
can be used to access the characters that compose the string. For
convenience, the data is '\\0'-terminated.
can be used to access the characters that compose the string.
Note that the pointer remains valid only as long as the string is
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)