QStringView Class

  • Header: QStringView

  • Since: Qt 5.10

  • qmake: QT += core

  • Group: QStringView is part of tools, string-processing

Detailed Description

A QStringView references a contiguous portion of a UTF-16 string it does not own. It acts as an interface type to all kinds of UTF-16 string, without the need to construct a QString first.

The UTF-16 string may be represented as an array (or an array-compatible data-structure such as QString, std::basic_string, etc.) of QChar, ushort, char16_t or (on platforms, such as Windows, where it is a 16-bit type) wchar_t.

QStringView is designed as an interface type; its main use-case is as a function parameter type. When QStringViews are used as automatic variables or data members, care must be taken to ensure that the referenced string data (for example, owned by a QString) outlives the QStringView on all code paths, lest the string view ends up referencing deleted data.

When used as an interface type, QStringView allows a single function to accept a wide variety of UTF-16 string data sources. One function accepting QStringView thus replaces three function overloads (taking QString, QStringRef, and (const QChar*, int)), while at the same time enabling even more string data sources to be passed to the function, such as u"Hello World", a char16_t string literal.

QStringViews should be passed by value, not by reference-to-const:

 
Sélectionnez
    void myfun1(QStringView sv);        // preferred
    void myfun2(const QStringView &sv); // compiles and works, but slower

If you want to give your users maximum freedom in what strings they can pass to your function, accompany the QStringView overload with overloads for

  • QChar: this overload can delegate to the QStringView version:

     
    Sélectionnez
        void fun(QChar ch) { fun(QStringView(&ch, 1)); }

    even though, for technical reasons, QStringView cannot provide a QChar constructor by itself.

  • QString: if you store an unmodified copy of the string and thus would like to take advantage of QString's implicit sharing.

  • QLatin1String: if you can implement the function without converting the QLatin1String to UTF-16 first; users expect a function overloaded on QLatin1String to perform strictly less memory allocations than the semantically equivalent call of the QStringView version, involving construction of a QString from the QLatin1String.

QStringView can also be used as the return value of a function. If you call a function returning QStringView, take extra care to not keep the QStringView around longer than the function promises to keep the referenced string data alive. If in doubt, obtain a strong reference to the data by calling toString() to convert the QStringView into a QString.

QStringView is a Literal Type, but since it stores data as char16_t, iteration is not constexpr (casts from const char16_t* to const QChar*, which is not allowed in constexpr functions). You can use an indexed loop and/or utf16() in constexpr contexts instead.

We strongly discourage the use of QList<QStringView>, because QList is a very inefficient container for QStringViews (it would heap-allocate every element). Use QVector (or std::vector) to hold QStringViews instead.

See Also

See also QString, QStringRef

Member Type Documentation

 

QStringView::const_iterator

This typedef provides an STL-style const iterator for QStringView.

See Also

QStringView::const_pointer

Alias for value_type *. Provided for compatibility with the STL.

QStringView::const_reference

Alias for value_type &. Provided for compatibility with the STL.

QStringView::const_reverse_iterator

This typedef provides an STL-style const reverse iterator for QStringView.

See Also

QStringView::difference_type

Alias for std::ptrdiff_t. Provided for compatibility with the STL.

QStringView::iterator

This typedef provides an STL-style const iterator for QStringView.

QStringView does not support mutable iterators, so this is the same as const_iterator.

See Also

QStringView::pointer

Alias for value_type *. Provided for compatibility with the STL.