このページでは

QAnyStringView Class

QAnyStringView クラスは、QString API の読み取り専用サブセットを使用して、Latin-1、UTF-8、または UTF-16 文字列を統一的に表示します。詳細...

ヘッダー: #include <QAnyStringView>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以下のように: Qt 6.0以降

注:このクラスのすべての関数は再入可能です。

QAnyStringView の比較

カテゴリ比較可能な型
strongQAnyStringView
strongchar16_t、QChar 、const char16_t *、const char *、QByteArray 、QByteArrayView 、QString 、QStringView 、QUtf8StringView 、およびQLatin1StringView 。

パブリック型

パブリック関数

QAnyStringView()
QAnyStringView(const Char &ch)
QAnyStringView(const Char (&string)[N])
QAnyStringView(const Char *str)
QAnyStringView(const Container &str)
QAnyStringView(const QByteArray &str)
QAnyStringView(const QString &str)
QAnyStringView(std::nullptr_t)
QAnyStringView(const Char *first, const Char *last)
QAnyStringView(const Char *str, qsizetype len)
(since 6.9) QString arg(Args &&... args) const
QChar back() const
(since 6.5) void chop(qsizetype n)
(since 6.5) QAnyStringView chopped(qsizetype n) const
const void *data() const
bool empty() const
(since 6.5) QAnyStringView first(qsizetype n) const
QChar front() const
bool isEmpty() const
bool isNull() const
(since 6.5) QAnyStringView last(qsizetype n) const
qsizetype length() const
(since 6.8) qsizetype max_size() const
qsizetype size() const
qsizetype size_bytes() const
(since 6.8) QAnyStringView &slice(qsizetype pos, qsizetype n)
(since 6.8) QAnyStringView &slice(qsizetype pos)
(since 6.5) QAnyStringView sliced(qsizetype pos) const
(since 6.5) QAnyStringView sliced(qsizetype pos, qsizetype n) const
QString toString() const
(since 6.5) void truncate(qsizetype n)
decltype(auto) visit(Visitor &&v) const

静的パブリックメンバー

int compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QAnyStringView fromArray(const Char (&string)[Size])
bool operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator<(const QAnyStringView &lhs, const QAnyStringView &rhs)
(since 6.7) QDebug operator<<(QDebug d, QAnyStringView s)
bool operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator==(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator>(const QAnyStringView &lhs, const QAnyStringView &rhs)
bool operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs)

詳細な説明

QAnyStringView は、自身が所有していない文字列の連続した部分を参照します。これは、QString を事前に構築する必要なく、あらゆる種類の文字列に対するインターフェース型として機能します。

QStringView やQUtf8StringView とは異なり、QAnyStringView は UTF-8、UTF-16、および Latin-1 のいずれかのエンコーディングの文字列を保持できます。Latin-1 がサポートされているのは、UTF-8 とは異なり、Latin-1 は UTF-16 データと効率的に比較できるためです。つまり、長さが一致しない場合、その文字列は等しくないことがすでに判明しているからです。 UTF-8/UTF-16の比較では、UTF-8は可変長エンコーディングであるため、このことは当てはまりません。

文字列は、char 、char8_t 、QChar 、ushort 、char16_t 、または(Windows など、16 ビット型であるプラットフォームでは)wchar_t の配列(あるいは、QString 、std::basic_string などの配列互換のデータ構造)として表現される場合があります。

QAnyStringViewはインターフェース型として設計されており、主な用途は関数の引数型として使用されることです。 QAnyStringView を自動変数やデータメンバーとして使用する場合、参照される文字列データ(たとえば、QString が所有するデータ)が、すべてのコードパスにおいて QAnyStringView よりも長く存続するように注意する必要があります。そうしないと、文字列ビューが削除されたデータを参照してしまう恐れがあります。

たとえば、

QAnyStringView str = funcReturningQString(); // return value is a temp

とすると、str が削除された一時変数を参照したままになってしまいます(これは未定義の挙動となります)。これは特に、1 文字のコンストラクタの場合に当てはまります:

QAnyStringView ch = u' '; // u' ' is a temporary
// oops, ch references deleted temporary

どちらの場合も、解決策は、一時オブジェクトを lvalue に「固定」し、その後にのみそこから QAnyStringView を作成することです:

const auto r = funcReturningQString();
QAnyStringView str = r; // ok, `r` outlives `str`
const auto sp = u' ';
QAnyStringView ch = sp; // ok, `sp` outlives `ch`

ただし、呼び出される関数のドキュメントでより長い存続期間が求められていない限り、QAnyStringViewを本来の目的通りインターフェース型として使用することは常に安全です:

void func(QAnyStringView s);
func(u' ');
func(functionReturningQString());

そもそも QAnyStringView がこれらの変換をサポートしているのは、このためです。

インターフェース型として使用される場合、QAnyStringView により、単一の関数が多種多様な文字列データソースを受け入れることが可能になります。 したがって、QAnyStringViewを受け入れる1つの関数によって、5つの関数オーバーロード(QString 、(const QChar*, qsizetype) 、QUtf8StringView 、QLatin1StringView (ただし上記を参照)、およびQChar を受け取るもの)が置き換えられると同時に、u8"Hello World" やchar8_t の文字列リテラルなど、さらに多くの文字列データソースをその関数に渡すことが可能になります。

Qtの他の部分と同様に、QAnyStringViewでは、QLatin1StringView として提示されていない限り、char データはUTF-8でエンコードされているものとみなされます。

ただし、Qt 6.4 以降、純粋な US-ASCII である UTF-8 文字列リテラルは、自動的に Latin-1 として格納されるようになりました。これはコンパイル時のチェックであり、実行時のオーバーヘッドは発生しません。この機能を利用するには、C++20 または最新の GCC を使用してコンパイルする必要があります。

QAnyStringViewは、const参照ではなく値渡しで渡す必要があります:

void myfun1(QAnyStringView sv);        // preferred
void myfun2(const QAnyStringView &sv); // compiles and works, but slower

QAnyStringView を関数の戻り値として使用することも可能ですが、これは推奨されません。関数の戻り値としては、QUtf8StringView またはQStringView の方が適しています。 QAnyStringViewを返す関数を呼び出す場合は、関数が参照する文字列データを保持すると約束している期間を超えて、QAnyStringViewを保持しないよう特に注意してください。不安がある場合は、toString()を呼び出してQAnyStringViewをQString に変換し、データへの強い参照を取得してください。

QAnyStringViewはリテラル型です。

互換性のある文字型

QAnyStringView は、さまざまな文字型(

  • char (符号付きおよび符号なしの両方)
  • char8_t (C++20のみ)
  • char16_t
  • wchar_t (16 ビット型の場合。例:Windows)
  • ushort
  • QChar

8ビットの文字型は UTF-8 データとして解釈されます(QLatin1StringView として指定された場合を除く)。一方、16ビットの文字型は、ホストのバイト順での UTF-16 データとして解釈されます(QString と同様です)。

以下の文字型は、単一文字コンストラクタでのみサポートされています:

  • QLatin1Char
  • QChar::SpecialCharacter
  • wchar_t (32ビット型の場合、すなわちUnix) (6.10以降)
  • char32_t

これらの文字型は、内部で UTF-16 シーケンスに分解されます(最後の文字についてはQChar::fromUcs4() を使用します)。

サイズと部分文字列

QAnyStringView の関数におけるすべてのサイズおよび位置は、エンコーディングのコード単位で表されます(つまり、これらの関数では、QString と同様に、UTF-16 のサロゲートペアは 2 としてカウントされ、UTF-8 のマルチバイトシーケンスはその長さに応じて 2、3、または 4 としてカウントされます)。

「どの文字列クラスを使用すべきか?」、QUtf8StringView 、およびQStringViewも参照してください 。

メンバ型のドキュメント

QAnyStringView::difference_type

std::ptrdiff_t の別名です。STL との互換性を確保するために提供されています。

QAnyStringView::size_type

qsizetype の別名です。STL との互換性を確保するために提供されています。

メンバ関数のドキュメント

[constexpr noexcept] QAnyStringView::QAnyStringView()

ヌル文字列ビューを構築します。

isNull()も参照してください 。

[constexpr noexcept] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char &ch)

単一の文字ch に基づいて文字列ビューを構築します。長さは通常、1 です(ただし、以下を参照してください)。

一般的に、この方法で作成された QAnyStringView は、式全体が終了し、一時変数が破棄された時点で、古いデータを参照し始めるものと見なす必要があります。 つまり、QAnyStringViewを受け取る関数に単一の文字を渡すためにこれを使用することは、問題なく安全です(その関数のドキュメントで、最初の呼び出しよりも長いライフタイムが要求されていない限り):

int to_int(QAnyStringView);
int res = to_int(u'9'); // OK, data stays around for the duration of the call

しかし、オブジェクトをより長く保持し続けることは未定義の挙動となります:

QAnyStringView ch = u'9';
int res = to_int(ch); // (silent) ERROR: ch references deleted data

これが必要な場合は、

const auto nine = u'9';
QAnyStringView ch(nine); // ok, references `nine`, which outlives `ch`
int res = to_int(ch); // 9

上記は、直接サポートされているすべてのCompatible Character Types 型に当てはまります。

ch がこれらの型のいずれかではなく、単にQChar に変換される場合(例:QChar::SpecialCharacter やQLatin1Char など)、QAnyStringViewは、2番目の例と同様に、式全体の終了時に削除される一時オブジェクトにバインドされます。

ch が単一のUTF-16コードユニットで表現できない場合(例えば、char32_t 値である場合など)、このコンストラクタはch を2つのUTF-16コードユニットに分解します。 その場合、結果の QAnyStringView の `size()` の値は `2 ` となり、分解結果が格納された一時バッファは、

[](char32_t ch, auto &&tmp = QChar::fromUcs4(ch)) {
    return QAnyStringView(tmp);
}

この場合の同等の安全なバージョンは次のようになります。

const auto decomposed = QChar::fromUcs4(ch);
QAnyStringView ch(decomposed);

QChar::fromUcs4() およびCompatible Character Typesも参照してください 。

[constexpr noexcept] template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&string)[N])

文字列リテラル `string` に基づいて文字列ビューを構築します。このビューは、最初の `Char(0) ` に遭遇するか、`N` に遭遇するかのいずれか早い方まで、配列をカバーします。配列全体が必要な場合は、代わりに `fromArray()` を使用してください。

string この文字列ビューオブジェクトの存続期間中、有効であり続けなければなりません。

制約

string が実際の配列であり、Char が互換性のある文字型である場合にのみ、オーバーロード解決の対象となります。

Compatible Character Typesも参照してください 。

[constexpr noexcept] template <typename Char> QAnyStringView::QAnyStringView(const Char *str)

str 上に文字列ビューを構築します。長さは、最初の `Char(0)` をスキャンして決定されます。

str この文字列ビューオブジェクトの存続期間中、有効であり続けなければなりません。

`nullptr `を`str `として渡すことは安全であり、その結果、空の文字列ビューが生成されます。

制約

str が配列ではなく、Char が互換性のある文字型である場合にのみ、オーバーロードの解決に関与します。

isNull() およびCompatible Character Typesも参照してください 。

[constexpr noexcept] template <typename Container> requires if_compatible_container<Container> QAnyStringView::QAnyStringView(const Container &str)

str 上に文字列ビューを構築します。長さはstd::size(str) から取得されます。

std::data(str) この文字列ビューオブジェクトの存続期間中、有効であり続けなければならない。

std::size(str) == 0 の場合に限り、文字列ビューは空になります。このコンストラクタが null の文字列ビューを生成する可能性があるかどうかは未定義です(その場合は、std::data(str) がnullptr を返す必要があります)。

制約

Container がvalue_type と同等の文字型を持つコンテナである場合にのみ、オーバーロードの解決に関与します。

関連項目: isNull() およびisEmpty()。

[noexcept] QAnyStringView::QAnyStringView(const QByteArray &str)

str 上に文字列ビューを構築します。str 内のデータは UTF-8 として解釈されます。

str.data() この文字列ビューオブジェクトの存続期間中、常に有効なままである必要があります。

str.isNull() の場合に限り、文字列ビューは null となります。

[noexcept] QAnyStringView::QAnyStringView(const QString &str)

str 上に文字列ビューを構築します。

str.data() この文字列ビューオブジェクトの存続期間中、有効なままである必要があります。

str.isNull() の場合に限り、文字列ビューは null になります。

[constexpr noexcept] QAnyStringView::QAnyStringView(std::nullptr_t)

ヌル文字列ビューを作成します。

isNull()も参照してください 。

[constexpr] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char *first, const Char *last)

first 上で、長さが (last -first) の文字列ビューを構築します。

[first,last) の範囲は、この文字列ビューオブジェクトの存続期間中、有効であり続けなければなりません。

last もnullptr である場合、nullptr をfirst として渡すことは安全であり、その結果、空の文字列ビューが生成されます。

last がfirst より前にある場合、またはfirst がnullptr であるのに対しlast がそうでない場合、その挙動は未定義となります。

制約

Char が互換性のある文字型である場合にのみ、オーバーロード解決の対象となります。

「 isNull()」および「Compatible Character Types 」も参照してください 。

[constexpr] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)

str 上に、長さlen の文字列ビューを構築します。

[str,len) の範囲は、この文字列ビューオブジェクトの存続期間中、有効なままである必要があります。

len が0である場合、nullptr をstr として渡すことは安全であり、その結果、空の文字列ビューが生成されます。

len が負の場合、または正でstr がnullptr である場合、挙動は未定義となります。

制約

Char が互換性のある文字型である場合にのみ、オーバーロード解決の対象となります。

isNull() およびCompatible Character Typesも参照してください 。

[since 6.9] template <typename... Args> QString QAnyStringView::arg(Args &&... args) const

この文字列中の「%N 」を、「args 」から得られる対応する引数に置き換えます。引数は位置指定ではありません。args の最初の引数は、%N を最も低い値のN (すべて)に置き換え、args の2番目の引数は、%N を次に低い値のN に置き換える、というように続きます。

Args QAnyStringView に暗黙的に変換可能な任意の型で構成されます。

この関数はQt 6.9で導入されました。

QString::arg(Args&&...)も参照してください 。

[constexpr] QChar QAnyStringView::back() const

文字列ビューの最後の文字を返します。

この関数は、STLとの互換性を確保するために提供されています。

警告: 空の文字列ビューに対してこの関数を呼び出すと 、未定義の挙動となります。

関連項目: front() およびSizes and Sub-Strings 。

[constexpr, since 6.5] void QAnyStringView::chop(qsizetype n)

この文字列ビューをn コードポイント分切り捨てます。

*this = first(size() - n) と同じです。

注: n < 0 またはn >size() の場合、動作は 未定義です。

この関数は Qt 6.5 で導入されました。

関連項目: sliced()、first()、last()、chopped()、truncate()、slice()、およびSizes and Sub-Strings 。

[constexpr, since 6.5] QAnyStringView QAnyStringView::chopped(qsizetype n) const

このオブジェクトの先頭から、長さsize() -n の部分文字列を返します。

first(size() - n) と同じです。

注: n < 0 またはn >size() の場合、動作は 未定義です。

この関数は Qt 6.5 で導入されました。

関連項目: sliced()、first()、last()、chop()、truncate()、slice()、およびSizes and Sub-Strings 。

[static noexcept] int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive)

文字列ビュー `lhs ` と文字列ビュー `rhs ` を比較し、`lhs ` が `rhs` より小さい場合は負の整数を、` ` が `rhs` より大きい場合は正の整数を、両者が等しい場合は 0 を返します。

cs がQt::CaseSensitive (デフォルト)の場合、比較は大文字と小文字を区別します。それ以外の場合は、大文字と小文字を区別しません。

operator==()、operator<()、およびoperator>()も参照してください 。

[constexpr noexcept] const void *QAnyStringView::data() const

文字列ビューの先頭文字へのconstポインタを返します。

注: 戻り値で表される文字配列は 、ヌル終端されていません。

関連項目: size_bytes()。

[constexpr noexcept] bool QAnyStringView::empty() const

この文字列ビューが空であるかどうか、つまりsize() == 0 であるかどうかを返します。

この関数は、STLとの互換性を確保するために提供されています。

isEmpty()、isNull()、およびsize()も参照してください 。

[constexpr, since 6.5] QAnyStringView QAnyStringView::first(qsizetype n) const

この文字列ビューの最初のn 個のコードポイントを含む文字列ビューを返します。

注: n < 0 またはn >size() の場合、動作は 未定義です。

この関数はQt 6.5で導入されました。

関連項目: last()、sliced()、chopped()、chop()、truncate()、slice()、およびSizes and Sub-Strings 。

[static constexpr noexcept] template <typename Char, size_t Size> requires if_compatible_char<Char> QAnyStringView QAnyStringView::fromArray(const Char (&string)[Size])

Size 個の要素からなる完全な文字列リテラルstring に対して、末尾のChar(0) を含めて文字列ビューを構築します。ビューにヌル終端文字を含めたくない場合は、それが末尾にあると確信できる時点でchop()を呼び出して除外することができます。 あるいは、配列リテラルを受け取るコンストラクタのオーバーロードを使用することもできます。これにより、データ内の最初のヌル終端文字の直前まで(その文字は含まない)のビューが作成されます。

string この文字列ビューオブジェクトの存続期間中、有効なままである必要があります。

Char が互換性のある文字型であれば、この関数はどの配列リテラルでも動作します。互換性のある文字型は、QChar 、ushort 、char16_t 、および(Windowsなどの16ビット型であるプラットフォームでは)wchar_t です。

[constexpr] QChar QAnyStringView::front() const

文字列ビューの先頭文字を返します。

この関数は、STLとの互換性を確保するために提供されています。

警告: 空の文字列ビューに対してこの関数を呼び出すと 、未定義の挙動となります。

back() およびSizes and Sub-Stringsも参照してください 。

[constexpr noexcept] bool QAnyStringView::isEmpty() const

この文字列ビューが空であるかどうか、つまり `size() == 0` であるかどうかを返します。

この関数は、他のQtコンテナとの互換性を確保するために提供されています。

empty()、isNull()、およびsize()も参照してください 。

[constexpr noexcept] bool QAnyStringView::isNull() const

この文字列ビューがnullであるかどうか、つまりdata() == nullptr であるかどうかを返します。

この関数は、他のQtコンテナとの互換性を確保するために提供されています。

empty()、isEmpty()、およびsize()も参照してください 。

[constexpr, since 6.5] QAnyStringView QAnyStringView::last(qsizetype n) const

この文字列ビューの最後のn 個のコードポイントを含む文字列ビューを返します。

注: n < 0 またはn >size() の場合、挙動は 未定義です。

この関数は Qt 6.5 で導入されました。

関連項目: first()、sliced()、chopped()、chop()、truncate()、slice() およびSizes and Sub-Strings 。

[constexpr noexcept] qsizetype QAnyStringView::length() const

size() と同じです。

この関数は、他のQtコンテナとの互換性を確保するために提供されています。

size()も参照してください 。

[constexpr noexcept, since 6.8] qsizetype QAnyStringView::max_size() const

この関数は、STLとの互換性を確保するために提供されています。

この関数は、文字列ビューが理論上表現可能な要素の最大数を返します。実際には、システムで使用可能なメモリ量によって制限されるため、この数ははるかに小さくなる可能性があります。

注: 戻り値は 現在使用されている文字型に基づいて計算されるため、2つの異なるビューでこの関数を呼び出すと、異なる結果が返される場合があります。

この関数は Qt 6.8 で導入されました。

[constexpr noexcept] qsizetype QAnyStringView::size() const

この文字列ビューのサイズを、エンコーディングのコードポイント単位で返します。

empty()、isEmpty()、isNull()、size_bytes()、およびSizes and Sub-Stringsも参照してください 。

[constexpr noexcept] qsizetype QAnyStringView::size_bytes() const

この文字列ビューのサイズを、コードポイントではなくバイト単位で返します。

この関数は、ハッシュ化やシリアライズを行う際に、data() と組み合わせて使用できます。

この関数は、STL との互換性を確保するために提供されています。

size() およびdata()も参照してください 。

[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos, qsizetype n)

この文字列ビューを、位置pos から始まり、n コードポイント分だけ延長するように変更します。

注: pos < 0、n < 0、またはpos +n >size() の場合、動作は 未定義です。

この関数は Qt 6.8 で導入されました。

sliced()、first()、last()、chopped()、chop()、truncate()、およびSizes and Sub-Stringsも参照してください 。

[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos)

この文字列ビューを、位置pos から始まり、その終わりまで続くように変更します。

注: pos < 0 またはpos >size() の場合、挙動は 未定義です。

これはオーバーロードされた関数です。

この関数は Qt 6.8 で導入されました。

関連項目: sliced()、first()、last()、chopped()、chop()、truncate()、およびSizes and Sub-Strings 。

[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos) const

このオブジェクトのpos の位置から始まり、その末尾まで続く文字列ビューを返します。

注: pos < 0 またはpos >size() の場合、動作は 未定義です。

この関数は Qt 6.5 で導入されました。

関連項目: first()、last()、chopped()、chop()、truncate()、slice()、およびSizes and Sub-Strings 。

[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos, qsizetype n) const

この文字列ビューの、位置pos から始まるn 個のコードポイントを含む文字列ビューを返します。

注: pos < 0、n < 0、またはpos +n >size() の場合、動作は 未定義です。

この関数は Qt 6.5 で導入されました。

first()、last()、chopped()、chop()、truncate()、slice()、およびSizes and Sub-Stringsも参照してください 。

QString QAnyStringView::toString() const

この文字列ビューのデータのディープコピーを、QString として返します。

この文字列ビューがnullである場合に限り、戻り値はnullのQString となります。

[constexpr, since 6.5] void QAnyStringView::truncate(qsizetype n)

この文字列ビューをn コードポイントに切り詰めます。

*this = first(n) と同じです。

注: n < 0 またはn >size() の場合、挙動は 未定義です。

この関数は Qt 6.5 で導入されました。

関連項目: sliced()、first()、last()、chopped()、chop()、およびSizes and Sub-Strings 。

[constexpr] template <typename Visitor> decltype(auto) QAnyStringView::visit(Visitor &&v) const

この文字列ビューが参照する文字列データのエンコーディングに応じて、QUtf8StringView 、QLatin1String 、またはQStringView のいずれかを引数としてv を呼び出します。

QAnyStringView を受け取る関数の多くは、このようにしてエンコーディングごとの関数に分岐します:

void processImpl(QLatin1String s) { ~~~ }
void processImpl(QUtf8StringView s) { ~~~ }
void processImpl(QStringView s) { ~~~ }

void process(QAnyStringView s)
{
    s.visit([](auto s) { processImpl(s); });
}

ここでは、QAnyStringView オブジェクトとラムダのパラメータの両方に、同じ名前「s 」を再利用しています。これはイディオム的なコードであり、例えば以下のようなより複雑な状況において、visit()の呼び出しを通じてオブジェクトの同一性を追跡するのに役立ちます。

bool equal(QAnyStringView lhs, QAnyStringView rhs)
{
    // assuming operator==(QAnyStringView, QAnyStringView) didn't, yet, exist:
    return lhs.visit([rhs](auto lhs) {
        rhs.visit([lhs](auto rhs) {
            return lhs == rhs;
        });
    });
}

visit() では、すべてのラムダ式のインスタンス化において、戻り値の型が同一であることが求められます。型が異なる場合、共通の型が存在していてもコンパイルエラーが発生します。これを修正するには、ラムダ式で明示的な戻り値の型を指定するか、return 文でキャストを行うことができます:

// wrong:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) {   // ERROR: lambdas return different types
        return input.sliced(0, input.size() / 2);
    });
}
// correct:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) -> QAnyStringView { // OK, explicit return type
        return input.sliced(0, input.size() / 2);
    });
}
// also correct:
QAnyStringView firstHalf(QAnyStringView input)
{
    return input.visit([](auto input) {
        return QAnyStringView(input.sliced(0, input.size() / 2)); // OK, cast to common type
    });
}

関連する非メンバー

[noexcept] bool operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator<(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator==(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator>(const QAnyStringView &lhs, const QAnyStringView &rhs)

[noexcept] bool operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs)

lhs とrhs を比較する演算子。

compare()も参照してください 。

[since 6.7] QDebug operator<<(QDebug d, QAnyStringView s)

デバッグストリーム `d` に `s ` を出力します。

d.quotedString() がtrue の場合、その文字列がどのエンコーディングで表現されているかを示します。単に文字列データのみを取得したい場合は、次のようにvisit()を使用してください:

s.visit([&d) (auto s) { d << s; });

この関数は Qt 6.7 で導入されました。

QAnyStringView::visit()も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.