QAnyStringView Class
QAnyStringView クラスは、QString API の読み取り専用サブセットを使用して、Latin-1、UTF-8、または UTF-16 文字列の統一ビューを提供します。詳細...
Header: | #include <QAnyStringView> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Since: | 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 ではなく値で渡す必要があります:
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()
文字列ビューは、この文字列ビューオブジェクトの有効期間中有効でなければなりません。
文字列ビューは、str.isNull()
の場合のみ NULL になります。
[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)
長さ (last -first) の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 より大きい場合は正の整数を、等しい場合は 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も参照してください 。
[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()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。