GeezerVison is showing cpprefjp.github.io — std::basic_string_view - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
class template
<string_view>
std:: basic_string_view (C++17)
namespace std {
template < class CharT , class Traits = char_traits < CharT >>
class basic_string_view ;
using string_view = basic_string_view < char > ;
using u8string_view = basic_string_view < char8_t > ; // C++20から
using u16string_view = basic_string_view < char16_t > ;
using u32string_view = basic_string_view < char32_t > ;
using wstring_view = basic_string_view < wchar_t > ;
}
概要
std::basic_string_viewは、文字列の所有権を保持せず、文字列のコピーを持つのではなく参照をして、参照先の文字列を加工して扱うクラスである。
文字配列型である文字列リテラルに対して、std::basic_string クラスが持つような便利なメンバ関数群を使用できる。文字列リテラルは静的記憶域に保存されるため、文字列リテラルをこのクラスのオブジェクトに参照させて、そのオブジェクトを持ち回ったとしても参照先の文字列リテラルの寿命が尽きるような問題は発生しない。
string_view sv = "Hello World" ; // この式の評価がおわったあとも、文字列リテラル "Hello World" の寿命は尽きない
string_view hello = sv.substr ( 0 , 5 ); // 先頭5文字を抽出する
このクラスの実装としては、文字配列の参照する先頭文字へのポインタと、文字数の2つをメンバ変数として持つ。これらの変数を変動させることによって、部分文字列の抽出や、限定された範囲内での検索といったことを実現する。
このクラスは、トリビアルコピー可能 である(C++23)
メンバ関数
構築・破棄
名前
説明
対応バージョン
(constructor)
コンストラクタ
C++17
~basic_string_view() = default;
デストラクタ
C++17
basic_string_view& operator=(const basic_string_view&) = default; basic_string_view& operator=(basic_string_view&&) = default;
代入演算子
C++17
イテレータ
名前
説明
対応バージョン
begin
先頭の要素を指すイテレータを取得する
C++17
end
末尾の次を指すイテレータを取得する
C++17
cbegin
先頭の要素を指す読み取り専用イテレータを取得する
C++17
cend
末尾の次を指す読み取り専用イテレータを取得する
C++17
rbegin
末尾を指す逆イテレータを取得する
C++17
rend
先頭の前を指す逆イテレータを取得する
C++17
crbegin
末尾を指す読み取り専用逆イテレータを取得する
C++17
crend
先頭の前を指す読み取り専用逆イテレータを取得する
C++17
領域
名前
説明
対応バージョン
size
文字列の長さを取得する
C++17
length
文字列の長さを取得する
C++17
max_size
参照可能な最大の文字列長を取得する
C++17
empty
文字列が空かどうかを判定する
C++17
要素アクセス
名前
説明
対応バージョン
operator[]
任意の位置の文字を取得する
C++17
at
任意の位置の文字を取得する
C++17
front
先頭文字を取得する
C++17
back
末尾文字を取得する
C++17
data
文字配列表現を取得する
C++17
文字列の変更
文字列の操作
検索
メンバ定数
名前
説明
対応バージョン
npos
無効な位置を表す。findやsubstrなどで使われる。static constexpr size_type npos = -1;
C++17
メンバ型
名前
説明
対応バージョン
traits_type
文字特性型 Traits
C++17
value_type
文字型 CharT
C++17
pointer
ポインタ型 value_type*
C++17
const_pointer
constポインタ型 const value_type*
C++17
reference
参照型 value_type&
C++17
const_reference
const参照型 const value_type&
C++17
const_iterator
読み取り専用イテレータ。実装定義 。 要素の型はvalue_type。 ランダムアクセスイテレータと連続イテレータの要件を満たす
C++17
iterator
イテレータ const_iterator
C++17
const_reverse_iterator
読み取り専用逆イテレータ reverse_iterator <const_iterator>
C++17
reverse_iterator
逆順イテレータ const_reverse_iterator
C++17
size_type
要素数を表す符号なし整数型 size_t
C++17
difference_type
イテレータの差を表す符号付き整数型 ptrdiff_t
C++17
非メンバ関数
文字列連結
比較演算
入出力
推論ガイド
リテラル
名前
説明
対応バージョン
sv
basic_string_viewのリテラル
C++17
ハッシュサポート
名前
説明
対応バージョン
template <class T> struct hash;
hashクラスの先行宣言
C++17
template <> struct hash<string_view>;
hashクラスのstring_viewに対する特殊化
C++17
template <> struct hash<wstring_view>;
hashクラスのwstring_viewに対する特殊化
C++17
template <> struct hash<u8string_view>;
hashクラスのu8string_viewに対する特殊化
C++20
template <> struct hash<u16string_view>;
hashクラスのu16string_viewに対する特殊化
C++17
template <> struct hash<u32string_view>;
hashクラスのu32string_viewに対する特殊化
C++17
上記の各*string_viewに対するhashクラスの特殊化は、それぞれ対応する*string型に対する特殊化 と同じハッシュ値を算出する。
例
基本的な使い方
出力
Hello
found
stringとconst char*の共通インタフェースとして使用する
#include <iostream>
#include <string>
#include <string_view>
// string, const char*、string_viewのどれでも受け取れる関数
void f ( std::string_view sv )
{
std::cout << sv . substr ( 0 , 4 ) << std::endl ;
}
int main ()
{
// 文字列リテラル (char配列) を渡す
f ( "Hello" );
// const char*を渡す
const char * chars = "Hello" ;
f ( chars );
// 左辺値のstringを渡す
std::string s = "Hello" ;
f ( s );
// stringの一時オブジェクトを渡す
// 関数f()内ではこの一時オブジェクトが生存しているので、
// string_view参照しても問題ない
f ( std::string ( "Hello" ));
}
出力
Hell
Hell
Hell
Hell
文字列リテラルを範囲として使用する場合にヌル文字が含まれないようにする
出力
[
A
B
C
]
[
A
B
C
]
バージョン
言語
処理系
参照