Класс QUtf8StringView
Класс QUtf8StringView предоставляет унифицированный взгляд на строки UTF-8 с подмножеством API QString только для чтения. Подробнее...
| Заголовок: | #include <QUtf8StringView> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Начиная с: | Qt 6.0 |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые типы
| const_iterator | |
| const_pointer | |
| const_reference | |
| const_reverse_iterator | |
| difference_type | |
| iterator | |
| pointer | |
| reference | |
| reverse_iterator | |
| size_type | |
| storage_type | |
| value_type |
Открытые функции
| QUtf8StringView(const Container &str) | |
| QUtf8StringView(const Char *str) | |
| QUtf8StringView(const Char (&)[N] string = N) | |
| QUtf8StringView(const Char *first, const Char *last) | |
| QUtf8StringView(const Char *str, qsizetype len) | |
| QUtf8StringView(std::nullptr_t) | |
| QUtf8StringView() | |
| QUtf8StringView::storage_type | at(qsizetype n) const |
| QUtf8StringView::storage_type | back() const |
| QUtf8StringView::const_iterator | begin() const |
| QUtf8StringView::const_iterator | cbegin() const |
| QUtf8StringView::const_iterator | cend() const |
| void | chop(qsizetype n) |
| QUtf8StringView | chopped(qsizetype n) const |
| QUtf8StringView::const_reverse_iterator | crbegin() const |
| QUtf8StringView::const_reverse_iterator | crend() const |
| QUtf8StringView::const_pointer | data() const |
| bool | empty() const |
| QUtf8StringView::const_iterator | end() const |
| QUtf8StringView | first(qsizetype n) const |
| QUtf8StringView::storage_type | front() const |
| bool | isEmpty() const |
| bool | isNull() const |
| QUtf8StringView | last(qsizetype n) const |
| QUtf8StringView::const_reverse_iterator | rbegin() const |
| QUtf8StringView::const_reverse_iterator | rend() const |
| qsizetype | size() const |
| QUtf8StringView | sliced(qsizetype pos) const |
| QUtf8StringView | sliced(qsizetype pos, qsizetype n) const |
| QString | toString() const |
| void | truncate(qsizetype n) |
| const char8_t * | utf8() const |
| QUtf8StringView::storage_type | operator[](qsizetype n) const |
Статические открытые члены
| QUtf8StringView | fromArray(const Char (&)[Size] string = Size) |
Подробное описание
QUtf8StringView ссылается на непрерывный фрагмент строки UTF-8, которой он не владеет. Он выступает в качестве интерфейсного типа для всех видов строк UTF-8, без необходимости предварительного создания QString или QByteArray.
Строка UTF-8 может быть представлена как массив (или совместимая с массивом структура данных, такая как std::basic_string и т. д.) char8_t, char, signed char или unsigned char.
QUtf8StringView разработан как интерфейсный тип; его основное использование — в качестве типа параметра функции. Когда QUtf8StringViews используются в качестве автоматических переменных или членов данных, необходимо убедиться, что ссылаемые данные строки (например, принадлежащие std::u8string) существуют дольше, чем QUtf8StringView по всем путям кода, иначе строковое представление может ссылаться на удаленные данные.
При использовании в качестве интерфейсного типа QUtf8StringView позволяет одной функции принимать широкий спектр источников данных строк UTF-8. Одна функция, принимающая QUtf8StringView, таким образом заменяет несколько перегрузок функций (принимающих, например, QByteArray), одновременно позволяя передавать в функцию еще больше источников данных строк, таких как u8"Hello World", char8_t (C++20) или char (C++17) строковый литерал. Несовместимость char8_t между C++17 и C++20 исчезает при использовании QUtf8StringView.
Как и все представления, QUtf8StringViews следует передавать по значению, а не по константной ссылке:
void myfun1(QUtf8StringView sv); // preferred
void myfun2(const QUtf8StringView &sv); // compiles and works, but slower Если вы хотите предоставить своим пользователям максимальную свободу в том, какие строки они могут передавать в вашу функцию, рассмотрите использование QAnyStringView вместо этого.
QUtf8StringView также может использоваться в качестве значения возврата функции. Если вы вызываете функцию, возвращающую QUtf8StringView, обратите особое внимание, чтобы не хранить QUtf8StringView дольше, чем функция гарантирует сохранение жизнеспособности ссылаемых данных строки. В случае сомнений получите сильную ссылку на данные, вызвав toString() для преобразования QUtf8StringView в QString.
QUtf8StringView — это Литеральный тип.
Совместимые типы символов
QUtf8StringView принимает строки различных типов символов:
-
char(как со знаком, так и без знака) -
char8_t(только C++20)
Размеры и подстроки
Все размеры и позиции в функциях QUtf8StringView представлены в кодовых точках UTF-8 (то есть многобайтовые последовательности UTF-8 считаются двумя, тремя или четырьмя в зависимости от их длины). QUtf8StringView не пытается обнаружить или предотвратить обрезку непосредственно через многобайтовые последовательности UTF-8. Это аналогично ситуации с QStringView и парами суррогатов.
C++20, char8_t и QUtf8StringView
В C++20, u8"" строковые литералы изменили свой тип с const char[] на const char8_t[]. Если бы Qt 6 мог полагаться на C++20, QUtf8StringView хранил бы char8_t напрямую, и следующие функции и псевдонимы использовали бы (указатели на) char8_t:
Ожидается, что QUtf8StringView в Qt 7 будет выглядеть именно так, но в Qt 6 это было невозможно. Вместо того, чтобы привязывать пользователей к интерфейсу C++17 на следующее десятилетие, Qt предоставляет два класса QUtf8StringView в разных (встроенных) именованных пространствах. Первый, в пространстве имен q_no_char8_t, имеет value_type const char и доступен повсеместно. Второй, в пространстве имен q_has_char8_t, имеет value_type const char8_t и доступен только при компиляции в режиме C++20.
q_no_char8_t — это встроенное именованное пространство независимо от версии C++, чтобы избежать случайных бинарных несовместимостей. Для использования версии char8_t, необходимо явно назвать её q_has_char8_t::QUtf8StringView.
Внутренне оба являются реализациями одного и того же шаблонного класса QBasicUtf8StringView. Пожалуйста, не используйте имя шаблонного класса в своём исходном коде.
См. также QAnyStringView, QUtf8StringView и QString.
Документация по типам членов
QUtf8StringView::const_iterator
Этот псевдоним типа предоставляет итератор типа STL для QUtf8StringView.
См. также iterator и const_reverse_iterator.
QUtf8StringView::const_pointer
Псевдоним для value_type *. Предоставлен для совместимости со STL.
QUtf8StringView::const_reference
Псевдоним для value_type &. Предоставлен для совместимости со STL.
QUtf8StringView::const_reverse_iterator
Этот псевдоним типа предоставляет обратный итератор типа STL для QUtf8StringView.
См. также reverse_iterator и const_iterator.
QUtf8StringView::difference_type
Псевдоним для std::ptrdiff_t. Предоставлен для совместимости со STL.
QUtf8StringView::iterator
Этот псевдоним типа предоставляет итератор типа STL для QUtf8StringView.
QUtf8StringView не поддерживает изменяемые итераторы, поэтому он такой же, как const_iterator.
См. также const_iterator и reverse_iterator.
QUtf8StringView::pointer
Псевдоним для value_type *. Предоставлен для совместимости со STL.
QUtf8StringView не поддерживает изменяемые указатели, поэтому он такой же, как const_pointer.
QUtf8StringView::reference
Псевдоним для value_type &. Предоставлен для совместимости со STL.
QUtf8StringView не поддерживает изменяемые ссылки, поэтому он такой же, как const_reference.
QUtf8StringView::reverse_iterator
Этот псевдоним типа предоставляет обратный итератор типа STL для QUtf8StringView.
QUtf8StringView не поддерживает изменяемые обратные итераторы, поэтому он такой же, как const_reverse_iterator.
См. также const_reverse_iterator и iterator.
QUtf8StringView::size_type
Псевдоним для qsizetype. Предоставлен для совместимости со STL.
[alias] QUtf8StringView::storage_type
Псевдоним для char.
QUtf8StringView::value_type
Псевдоним для const char. Предоставлен для совместимости со STL.
Документация по функциям-членам
template <typename Container, if_compatible_container<Container>> QUtf8StringView::QUtf8StringView(const Container &str)
Создаёт представление строки для str. Длина берется из str.size().
str.data() должно оставаться валидным в течение всего срока жизни объекта представления этой строки.
Этот конструктор участвует в разрешении перегрузки только если Container является экземпляром std::basic_string с совместимым типом символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
Представление строки будет пустым тогда и только тогда, когда str.empty(). Не определено, может ли этот конструктор привести к представлению строки с нулевым значением (str.data() должно было бы вернуть nullptr для этого).
См. также isNull() и isEmpty().
template <typename Char> QUtf8StringView::QUtf8StringView(const Char *str)
Создаёт представление строки для str. Длина определяется путём поиска первого Char(0).
str должен оставаться валидным в течение всего срока жизни объекта представления этой строки.
Передача nullptr в качестве str безопасна и приводит к представлению строки с нулевым значением.
Этот конструктор участвует в разрешении перегрузки только если str не является массивом и если Char — это совместимый тип символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
template <typename Char, size_t N> QUtf8StringView::QUtf8StringView(const Char (&)[N] string = N)
Создаёт представление строки для литерала символьной строки string. Представление охватывает массив до первого Char(0) или N, в зависимости от того, что встретится раньше. Если вам нужно всё содержимое массива, используйте fromArray() вместо этого.
string должен оставаться валидным в течение всего срока жизни объекта представления этой строки.
Этот конструктор участвует в разрешении перегрузки только если string является фактическим массивом и если Char — это совместимый тип символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
См. также fromArray().
template <typename Char, if_compatible_char<Char>> QUtf8StringView::QUtf8StringView(const Char *first, const Char *last)
Создаёт представление строки для first с длиной (last - first).
Диапазон [first,last) должен оставаться валидным в течение всего срока жизни объекта представления этой строки.
Передача \nullptr в качестве first безопасна, если last тоже nullptr, и приводит к представлению строки с нулевым значением.
Поведение не определено, если last предшествует first или first — nullptr, а last — нет.
Этот конструктор участвует в разрешении перегрузки только если Char — это совместимый тип символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
template <typename Char, if_compatible_char<Char>> QUtf8StringView::QUtf8StringView(const Char *str, qsizetype len)
Создаёт представление строки для str с длиной len.
Передача nullptr в качестве str безопасна, если len равно 0, и приводит к представлению строки с нулевым значением.
Поведение не определено, если len отрицательное или, если положительное, если str — nullptr.
Этот конструктор участвует в разрешении перегрузки только в том случае, если Char является совместимым типом символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
QUtf8StringView::QUtf8StringView(std::nullptr_t)
Создаёт представление строки со значением null.
См. также isNull().
QUtf8StringView::QUtf8StringView()
Создаёт представление строки со значением null.
См. также isNull().
QUtf8StringView::storage_type QUtf8StringView::at(qsizetype n) const
Возвращает код символа в позиции n в этой строке.
Поведение неопределено, если n отрицательно или не меньше size().
См. также operator[](), front() и back().
QUtf8StringView::storage_type QUtf8StringView::back() const
Возвращает последний код символа в строке. Аналогично last().
Эта функция предоставляется для совместимости со STL.
Предупреждение: Вызов этой функции для пустой строки приводит к неопределённому поведению.
См. также front().
QUtf8StringView::const_iterator QUtf8StringView::begin() const
Возвращает константный итератор STL, указывающий на первый код символа в строке.
Эта функция предоставляется для совместимости со STL.
См. также end(), cbegin(), rbegin() и data().
QUtf8StringView::const_iterator QUtf8StringView::cbegin() const
Аналогично begin().
Эта функция предоставляется для совместимости со STL.
См. также cend(), begin(), crbegin() и data().
QUtf8StringView::const_iterator QUtf8StringView::cend() const
Аналогично end().
Эта функция предоставляется для совместимости со STL.
См. также cbegin(), end() и crend().
void QUtf8StringView::chop(qsizetype n)
Усекает представление строки на n кодов символов.
Аналогично *this = first(size() - n).
Примечание: Поведение неопределено, когда n < 0 или n > size().
См. также sliced(), first(), last(), chopped() и truncate().
QUtf8StringView QUtf8StringView::chopped(qsizetype n) const
Возвращает подстроку длины size() - n, начиная с начала этого объекта.
Аналогично first(size() - n).
Примечание: Поведение неопределено, когда n < 0 или n > size().
См. также sliced(), first(), last(), chop() и truncate().
QUtf8StringView::const_reverse_iterator QUtf8StringView::crbegin() const
Аналогично rbegin().
Эта функция предоставляется для совместимости со STL.
См. также crend(), rbegin() и cbegin().
QUtf8StringView::const_reverse_iterator QUtf8StringView::crend() const
Аналогично rend().
Эта функция предоставляется для совместимости со STL.
См. также crbegin(), rend() и cend().
QUtf8StringView::const_pointer QUtf8StringView::data() const
Возвращает указатель на первый код символа в строке.
Примечание: Символьный массив, возвращаемый функцией, не завершается нулём.
См. также begin(), end() и utf8().
bool QUtf8StringView::empty() const
Возвращает значение true, если представление строки пустое - то есть, если size() == 0.
Эта функция предоставляется для совместимости со STL.
См. также isEmpty(), isNull(), size() и length().
QUtf8StringView::const_iterator QUtf8StringView::end() const
Возвращает константный итератор STL, указывающий на мнимый код символа после последнего кода символа в списке.
Эта функция предоставляется для совместимости со STL.
См. также begin(), cend() и rend().
QUtf8StringView QUtf8StringView::first(qsizetype n) const
Возвращает представление строки, содержащее первые n кодов символов этой строки.
Примечание: Поведение неопределено, когда n < 0 или n > size().
См. также last(), sliced(), chopped(), chop() и truncate().
[static] template <typename Char, size_t Size, if_compatible_char<Char>> QUtf8StringView QUtf8StringView::fromArray(const Char (&)[Size] string = Size)
Создаёт представление строки по полному литералу строки символов string, включая любые завершающие Char(0). Если вы не хотите, чтобы в представлении присутствовал символ завершения строки, вы можете chop() его, когда уверены, что он находится в конце. В качестве альтернативы можно использовать перегрузку конструктора, принимающую массивный литерал, который создаст представление до, но не включая, первый нулевой терминатор в данных.
string должен оставаться допустимым на протяжении всего срока действия этого объекта представления строки.
Эта функция будет работать с любым литералом массива, если Char является совместимым типом символов. Совместимые типы символов: char8_t, char, signed char и unsigned char.
QUtf8StringView::storage_type QUtf8StringView::front() const
Возвращает первый код символа в строке. Аналогично first().
Эта функция предоставляется для совместимости со STL.
Предупреждение: Вызов этой функции для пустой строки приводит к неопределённому поведению.
См. также back().
bool QUtf8StringView::isEmpty() const
Возвращает значение true, если представление строки пустое - то есть, если size() == 0.
Эта функция предоставляется для совместимости с другими контейнерами Qt.
См. также empty(), isNull(), size() и length().
bool QUtf8StringView::isNull() const
Возвращает значение true, если представление строки имеет значение null - то есть, если data() == nullptr.
Эта функция предоставляется для совместимости с другими контейнерами Qt.
См. также empty(), isEmpty(), size() и length().
QUtf8StringView QUtf8StringView::last(qsizetype n) const
Возвращает представление строки, содержащее последние n кодов символов этой строки.
Примечание: Поведение неопределено, когда n < 0 или n > size().
См. также first(), sliced(), chopped(), chop() и truncate().
QUtf8StringView::const_reverse_iterator QUtf8StringView::rbegin() const
Возвращает константный обратный итератор STL, указывающий на первый код символа в строке в обратном порядке.
Эта функция предоставляется для совместимости со STL.
См. также rend(), crbegin() и begin().
QUtf8StringView::const_reverse_iterator QUtf8StringView::rend() const
Возвращает обратный итератор STL, указывающий на позицию после последнего кодового пункта в строке, в обратном порядке.
Эта функция предоставляется для совместимости со STL.
См. также rbegin(), crend() и end().
qsizetype QUtf8StringView::size() const
Возвращает размер этой строковой области просмотра в кодовых пунктах UTF-8 (то есть многобайтовые последовательности считаются больше чем одним кодовым пунктом, так же, как пары суррогатов в QString и QStringView).
См. также empty(), isEmpty(), isNull() и length().
QUtf8StringView QUtf8StringView::sliced(qsizetype pos) const
Возвращает строковую область просмотра, начинающуюся с позиции pos в этом объекте и простирающуюся до его конца.
Примечание: Поведение не определено, когда pos < 0 или pos > size().
См. также first(), last(), chopped(), chop() и truncate().
QUtf8StringView QUtf8StringView::sliced(qsizetype pos, qsizetype n) const
Возвращает строковую область просмотра, содержащую n кодовых пунктов этой строковой области просмотра, начиная с позиции pos.
Примечание: Поведение не определено, когда pos < 0, n < 0 или pos + n > size().
См. также first(), last(), chopped(), chop() и truncate().
QString QUtf8StringView::toString() const
Возвращает глубокую копию данных этой строковой области просмотра в виде QString.
Значение возврата будет пустой QString только в том случае, если эта строковая область просмотра является пустой.
void QUtf8StringView::truncate(qsizetype n)
Усекает эту строковую область просмотра до n кодовых пунктов.
То же, что и *this = first(n).
Примечание: Поведение не определено, когда n < 0 или n > size().
См. также sliced(), first(), last(), chopped() и chop().
const char8_t *QUtf8StringView::utf8() const
Возвращает указатель на первый кодовый пункт в строке.
Результат возвращается как const char8_t*, поэтому эта функция доступна только при компиляции в режиме C++20.
Примечание: Символьный массив, представленный возвращаемым значением, не завершается нулем.
См. также begin(), end() и data().
QUtf8StringView::storage_type QUtf8StringView::operator[](qsizetype n) const
Возвращает кодовый пункт в позиции n в этой строковой области просмотра.
Поведение не определено, если n отрицательно или не меньше size().
См. также at(), front() и back().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qutf8stringview.html