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は、文字列データのためのクラスの一部です。
このクラスは強く比較可能です。
このクラスは char16_t,QChar, const char16_t *, const char *,QByteArray,QByteArrayView,QString,QStringView,QUtf8StringView,QLatin1StringView と強く比較可能です。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
パブリック関数
QAnyStringView() | |
QAnyStringView(const Char (&)[N] string) | |
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) | |
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) |
関連する非メンバー
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と異なり、UTF-16データと効率的に比較できるからです。UTF-8は可変長エンコーディングであるため、UTF-8とUTF-16の比較には当てはまらない。
文字列は、char
、char8_t
、QChar 、ushort
、char16_t
、(Windowsのような16ビット型のプラットフォームでは)wchar_t
の配列(またはQString 、std::basic_stringなどの配列互換のデータ構造)として表すことができます。
QAnyStringViewはインタフェース型として設計されています。その主な使用例は、関数のパラメータ型です。QAnyStringView が自動変数またはデータ・メンバとして使用される場合、文字列ビューが削除されたデータを参照することにならないように、参照される文字列データ(たとえば、QString によって所有される)がすべてのコード・パス上で 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 は、reference-to-const ではなく value で渡す必要があります:
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
(Windows などの 16 ビット型の場合)ushort
QChar
8 ビットの文字タイプは UTF-8 データとして解釈され (QLatin1StringView として表示される場合を除く)、16 ビットの文字タイプはホスト・バイト順の UTF-16 データとして解釈されます (QString と同じ)。
サイズとサブ文字列
QAnyStringView 関数におけるすべてのサイズと位置は、エンコーディングのコード単位です (つまり、UTF-16 サロゲートペアは、これらの関数ではQString と同じ 2 つとしてカウントされ、UTF-8 マルチバイトシーケンスは、その長さに応じて 2 つ、3 つ、または 4 つとしてカウントされます)。
QUtf8StringView およびQStringViewも参照 。
メンバ型ドキュメント
QAnyStringView::difference_type
std::ptrdiff_t
のエイリアス。STL との互換性のために提供される。
QAnyStringView::size_type
qsizetype のエイリアス。STL との互換性のために提供される。
メンバ関数ドキュメント
[constexpr noexcept]
QAnyStringView::QAnyStringView()
NULL 文字列ビューを構築します。
isNull()も参照ください 。
[constexpr noexcept]
template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&)[N] string)
文字列リテラル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 は、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
str としてnullptr
を渡すと安全で、NULL 文字列ビューになります。
このコンストラクタは、str が配列でなく、Char
が互換性のある文字型である場合にのみ、オーバーロードの解決に参加します。
isNull() およびCompatible Character Typesも参照 。
[constexpr noexcept]
template <typename Container, QAnyStringView::if_compatible_container<Container> = true> QAnyStringView::QAnyStringView(const Container &str)
str の文字列ビューを構築する。長さはstd::size(str)
。
std::data(str)
は、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
このコンストラクタは、Container
がvalue_type
と互換性のある文字型を持つコンテナである場合にのみ、オーバーロード解決に参加します。
文字列ビューが空になるのは、std::size(str) == 0
の場合のみです。このコンストラクタがNULLの文字列ビューを生成できるかどうかは未定です(std::data(str)
の場合、nullptr
を返す必要があります)。
[noexcept]
QAnyStringView::QAnyStringView(const QByteArray &str)
str の文字列ビューを構築する。str のデータは UTF-8 として解釈されます。
str.data()
文字列ビューは、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
文字列ビューは、str.isNull()
の場合のみ null になります。
[noexcept]
QAnyStringView::QAnyStringView(const QString &str)
str の文字列ビューを構築します。
str.data()
文字列ビューは、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
文字列ビューが null になるのは、str.isNull()
の場合のみです。
[constexpr noexcept]
QAnyStringView::QAnyStringView(std::nullptr_t)
NULL 文字列ビューを構築します。
isNull()も参照ください 。
[constexpr]
template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *first, const Char *last)
first に、長さ (last -first) の文字列ビューを構築する。
[first,last)
の範囲は、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
first としてnullptr
を渡しても、last がnullptr
の場合は安全であり、NULL 文字列ビューになります。
last がfirst より前にある場合、またはfirst がnullptr
でlast がそうでない場合の動作は未定義です。
このコンストラクタは、Char
が互換性のある文字型である場合にのみ、オーバーロード解決に参加します。
isNull() およびCompatible Character Typesも参照のこと 。
[constexpr]
template <typename Char, QAnyStringView::if_compatible_char<Char> = true> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)
長さlen を持つstr の文字列ビューを構築します。
[str,len)
の範囲は、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
str としてnullptr
を渡しても、len が 0 の場合は安全であり、NULL 文字列ビューになります。
len が負の場合、または正の場合、str がnullptr
の場合の動作は未定義です。
このコンストラクタは、Char
が互換性のある文字型である場合にのみ、オーバーロード解決に参加します。
isNull() およびCompatible Character Typesも参照のこと 。
[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 より大きい場合は正の整数を、等しい場合はゼロを返す。
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も参照してください 。
[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 との互換性のために用意されています。
[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である場合に限り、戻り値はNULLQString になります。
[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)
s をデバッグストリームd に出力する。
d.quotedString()
がtrue
の場合、文字列がどのエンコーディングであるかを示す。文字列データだけが欲しい場合は、このようにvisit() を使います:
s.visit([&d) (auto s) { d << s; });
この関数は Qt 6.7 で導入されました。
QAnyStringView::visit()も参照してください 。
© 2025 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.