Namespaces
Variants

std:: basic_string_view

From cppreference.net
Strings library
Classes
basic_string_view
(C++17)
定義先ヘッダ <string_view>
template <

class CharT,
class Traits = std:: char_traits < CharT >

> class basic_string_view ;
(C++17以降)

クラステンプレート basic_string_view は、位置ゼロから始まる定数連続 CharT シーケンスを参照できるオブジェクトを記述します。

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

std::basic_string_view のすべての特殊化は TriviallyCopyable 型です。

(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++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)
連続したオブジェクトシーケンスに対する非所有ビュー
(クラステンプレート)
リスト初期化 で作成された一時配列を参照する
(クラステンプレート)