Namespaces
Variants

std::basic_string_view

ja.cppreference.net より
 
 
 
 
ヘッダ <string_view>
template<
    class CharT,
    class Traits = std::char_traits<CharT>
> class basic_string_view;
で定義 (C++17以上)

クラステンプレート basic_string_view は、位置0の先頭要素を持つ、定数連続シーケンス CharT を参照できるオブジェクトを表します。

basic_string_view str の場合、str の要素へのポインタ、イテレータ、および参照は、範囲 [str.data(), str.data() + str.size()) 内のポインタを無効化する操作によって無効化されます。

std::basic_string_view のすべての特殊化は トリビアルコピー可能 型です。

(C++23以上)

一般的な文字型に対するいくつかの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 、
および LegacyContiguousIterator (C++20以前)
ConstexprIterator および contiguous_iterator (C++20以降)

その value_type は CharT

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

注記: iterator と const_iterator は同じ型です。これは、string viewが定数文字シーケンスへのビューであるためです。

Container のイテレータ型に対するすべての要件は、 basic_string_view の iterator 型および const_iterator 型にも同様に適用されます。

データメンバ

メンバー 説明
const_pointer data_ 基となるシーケンスへのポインタ
( 説明専用メンバーオブジェクト* )
size_type size_ 文字数
( 説明専用メンバーオブジェクト* )

メンバー関数

コンストラクタと代入
basic_string_viewを構築する
(公開メンバ関数)
ビューを代入する
(公開メンバ関数)
イテレータ
先頭へのイテレータを返す
(公開メンバ関数)
終端へのイテレータを返す
(公開メンバ関数)
先頭への逆方向イテレータを返す
(公開メンバ関数)
末尾への逆方向イテレータを返す
(公開メンバ関数)
要素アクセス
指定された文字にアクセスします
(公開メンバ関数)
境界チェック付きで指定された文字にアクセスする
(公開メンバ関数)
最初の文字にアクセスする
(public member function)
最後の文字にアクセスする
(公開メンバ関数)
ビューの最初の文字へのポインタを返す
(公開メンバ関数)
容量
文字数を返す
(公開メンバ関数)
最大文字数を返す
(公開メンバ関数)
ビューが空かどうかをチェックする
(公開メンバー関数)
修飾子
先頭を前方に移動することでビューを縮小する
(公開メンバ関数)
末尾を後方に移動することでビューを縮小します
(公開メンバ関数)
内容を交換する
(公開メンバ関数)
操作
文字をコピーする
(パブリックメンバ関数)
部分文字列を返す
(パブリックメンバ関数)
(C++26)
部分ビューを返す
(パブリックメンバ関数)
2つのビューを比較する
(パブリックメンバ関数)
文字列ビューが指定された接頭辞で始まるか確認する
(パブリックメンバ関数)
(C++20)
文字列ビューが指定された接尾辞で終わるか確認する
(パブリックメンバ関数)
(C++23)
文字列ビューが指定された部分文字列または文字を含むか確認する
(パブリックメンバ関数)
ビュー内の文字を検索する
(パブリックメンバ関数)
部分文字列の最後の出現位置を検索する
(パブリックメンバ関数)
文字の最初の出現位置を検索する
(パブリックメンバ関数)
文字の最後の出現位置を検索する
(パブリックメンバ関数)
文字が最初に現れない位置を検索する
(パブリックメンバ関数)
文字が最後に現れない位置を検索する
(パブリックメンバ関数)

定数

[static]
特殊な値。正確な意味は文脈によって異なる
(公開静的メンバ定数)

非メンバー関数

(C++17) (C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20)
二つの文字列ビューを辞書順で比較する
(関数テンプレート)
入出力
(C++17)
文字列ビューに対するストリーム出力を実行する
(関数テンプレート)

リテラル

インライン名前空間で定義 std::literals::string_view_literals
文字配列リテラルのstring viewを作成する
(関数)

ヘルパークラス

文字列ビューのハッシュサポート
(クラステンプレートの特殊化)

ヘルパーテンプレート

template < class CharT, class Traits >

inline constexpr bool

ranges:: enable_borrowed_range < std :: basic_string_view < CharT, Traits >> = true ;
(C++20以降)

この ranges::enable_borrowed_range の特殊化は、 basic_string_view が borrowed_range を満たすようにします。

template < class CharT, class Traits >

inline constexpr bool

ranges:: enable_view < std :: basic_string_view < CharT, Traits >> = true ;
(C++20以降)

この特殊化は、 ranges::enable_view が basic_string_view を view として満たすようにする。

推論ガイド

(C++20以降)

注記

プログラマーの責任として、 std::string_view が指し示す文字配列よりも長く生存しないことを保証する必要があります:

std::string_view good{"a string literal"};
    // 「良い」ケース: `good`は静的配列を指す。
    // 文字列リテラルは永続的なデータストレージに存在する。
std::string_view bad{"a temporary string"s};
    // 「悪い」ケース: `bad`はダングリングポインタを保持する。std::operator""sによって作成された
    // std::string一時オブジェクトは文の終了時に破棄されるため。

std::basic_string_viewの特殊化は、C++23で導入された正式な要件以前から、既存のすべての実装においてすでに自明にコピー可能な型です。

機能テスト マクロ 値 標準 機能
__cpp_lib_string_view 201606L (C++17) std::string_view
201803L (C++20) ConstexprIterator
__cpp_lib_string_contains 202011L (C++23) contains

例

#include <iostream>
#include <string_view>
int main()
{
    #define A "▀"
    #define B "▄"
    #define C "─"
    constexpr std::string_view blocks[]{A B C, B A C, A C B, B C A};
    for (int y{}, p{}; y != 8; ++y, p = ((p + 1) % 4))
    {
        for (char x{}; x != 29; ++x)
            std::cout << blocks[p];
        std::cout << '\n';
    }
}

出力:

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3203 C++17 メンバー関数から返されるポインター、イテレーター、
および参照のみが無効化される可能性がある
basic_string_view
basic_string_view の要素へのすべてのポインター、イテレーター、
および参照が無効化される可能性がある

関連項目

文字シーケンスを格納および操作する
(クラステンプレート)
2つの文字列、文字列と char 、または文字列と string_view を連結する
(関数テンプレート)
(C++20)
連続したオブジェクトシーケンスに対する非所有ビュー
(クラステンプレート)
リスト初期化 で作成された一時配列を参照する
(クラステンプレート)