std::basic_string_view
| ヘッダ <string_view> で定義 |
||
| template< class CharT, |
(C++17以降) | |
クラステンプレートbasic_string_viewは、先頭要素が位置0にある、CharTの定数で連続したシーケンスを参照できるオブジェクトを記述します。
basic_string_view strに対して、範囲[str.data(), str.data() + str.size())内のポインタを無効にする操作が行われた場合、strの要素へのポインタ、イテレータ、および参照は無効になります。
|
|
(C++23から) |
典型的な実装では、定数CharTへのポインタとサイズという2つのメンバのみを保持します。
一般的な文字型のためにいくつかの typedef が提供されています
| ヘッダ
<string_view> で定義 | |
| 型 | 定義 |
| std::string_view (C++17) | std::basic_string_view<char> |
| std::wstring_view (C++17) | std::basic_string_view<wchar_t> |
| std::u8string_view (C++20) | std::basic_string_view<char8_t> |
| std::u16string_view (C++17) | std::basic_string_view<char16_t> |
| std::u32string_view (C++17) | std::basic_string_view<char32_t> |
目次 |
[編集] テンプレートパラメータ
| CharT | - | 文字型 |
| Traits | - | 文字型に対する操作を指定するCharTraitsクラス。std::basic_stringと同様に、Traits::char_typeはCharTと同じ型でなければならず、そうでなければプログラムは不適格となります。 |
[編集] メンバ型
| ネストされた型 | 定義 | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
pointer
|
CharT* | ||||
const_pointer
|
const CharT* | ||||
reference
|
CharT& | ||||
const_reference
|
const CharT& | ||||
const_iterator
|
実装定義の定数LegacyRandomAccessIterator、
その | ||||
iterator
|
const_iterator
| ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||
reverse_iterator
|
const_reverse_iterator
| ||||
size_type
|
std::size_t | ||||
difference_type
|
std::ptrdiff_t |
注:string viewは定数文字シーケンスへのビューであるため、iteratorとconst_iteratorは同じ型です。
コンテナのイテレータ型に対する全ての要件は、basic_string_viewのiteratorおよびconst_iterator型にも同様に適用されます。
[編集] メンバ関数
コンストラクタと代入 | |
basic_string_viewを構築する(public member function) | |
| ビューを代入する (public member function) | |
イテレータ | |
| 先頭へのイテレータを返す (public member function) | |
| 末尾へのイテレータを返す (public member function) | |
| 先頭への逆イテレータを返す (public member function) | |
| 末尾への逆イテレータを返す (public member function) | |
要素アクセス | |
| 指定された文字にアクセスする (public member function) | |
| 境界チェック付きで指定された文字にアクセスする (public member function) | |
| 最初の文字にアクセスする (public member function) | |
| 最後の文字にアクセスする (public member function) | |
| ビューの最初の文字へのポインタを返す (public member function) | |
容量 | |
| 文字数を返す (public member function) | |
| 最大文字数を返す (public member function) | |
| ビューが空かどうかをチェックする (public member function) | |
変更 | |
| ビューの開始位置を前方に移動して縮小する (public member function) | |
| ビューの終了位置を後方に移動して縮小する (public member function) | |
| 内容を交換する (public member function) | |
操作 | |
| 文字をコピーする (public member function) | |
| 部分文字列を返す (public member function) | |
| 2つのビューを比較する (public member function) | |
| (C++20) |
string viewが指定されたプレフィックスで始まるかチェックする (public member function) |
| (C++20) |
string viewが指定されたサフィックスで終わるかチェックする (public member function) |
| (C++23) |
string viewが指定された部分文字列または文字を含むかチェックする (public member function) |
| ビュー内の文字を検索する (public member function) | |
| 部分文字列が最後に現れる位置を見つける (public member function) | |
| 文字が最初に現れる位置を見つける (public member function) | |
| 文字が最後に現れる位置を見つける (public member function) | |
| 文字が最初に現れない位置を見つける (public member function) | |
| 文字が最後に現れない位置を見つける (public member function) | |
定数 | |
| [static] |
特別な値。正確な意味は文脈に依存する (public static member constant) |
[編集] 非メンバ関数
| (C++17)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20) |
2つのstring viewを辞書順で比較する (function template) |
入出力 | |
| (C++17) |
string viewのストリーム出力を行う (function template) |
[編集] リテラル
| インライン名前空間
std::literals::string_view_literalsで定義 | |
| (C++17) |
文字配列リテラルのstring viewを作成する (function) |
[編集] ヘルパークラス
| 文字列ビューのハッシュサポート (クラステンプレートの特殊化) |
[編集] ヘルパーテンプレート
| template< class CharT, class Traits > inline constexpr bool |
(C++20以降) | |
このranges::enable_borrowed_rangeの特殊化により、basic_string_viewはborrowed_rangeを満たします。
| template< class CharT, class Traits > inline constexpr bool |
(C++20以降) | |
このranges::enable_viewの特殊化により、basic_string_viewはviewを満たします。
推論補助 |
(C++20以降) |
[編集] ノート
std::string_viewが、指し示している文字配列より長生きしないようにするのはプログラマの責任です。
std::string_view good{"a string literal"}; // "Good" case: `good` points to a static array. // String literals reside in persistent data storage. std::string_view bad{"a temporary string"s}; // "Bad" case: `bad` holds a dangling pointer since the std::string temporary, // created by std::operator""s, will be destroyed at the end of the statement.
std::basic_string_viewの特殊化は、C++23で正式な要件が導入される前から、既存の全ての実装において既にtrivially copyableな型です。
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_string_view |
201606L |
(C++17) | std::string_view
|
201803L |
(C++20) | ConstexprIterator | |
__cpp_lib_string_contains |
202011L |
(C++23) | contains
|
[編集] 例
出力
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3203 | C++17 | のメンバ関数から返された ポインタ、イテレータ、および参照のみが basic_string_view無効になる可能性がある |
の要素への 全てのポインタ、イテレータ、および参照が basic_string_view無効になる可能性がある |
[編集] 関連項目
| 文字のシーケンスを格納し操作する (クラステンプレート) | |
| 2つの文字列、文字列とchar、または文字列とstring_viewを連結する (function template) | |
| (C++20) |
連続したオブジェクトのシーケンスに対する所有権を持たないビュー (class template) |
| (C++11) |
リスト初期化で作成された一時配列を参照する (クラステンプレート) |