GeezerVison is showing cpprefjp.github.io — std::basic_string::推論補助 - cpprefjp C++日本語リファレンス
最終更新日時:
2026年03月23日 19時49分31秒 (JST)
Raclamusi
が更新
履歴
編集
<string>
std:: basic_string:: 推論補助 (C++17)
namespace std {
template < class InputIterator ,
class Allocator = allocator < typename iterator_traits < InputIterator >:: value_type >>
basic_string ( InputIterator , InputIterator , Allocator = Allocator ())
-> basic_string < typename iterator_traits < InputIterator >:: value_type ,
char_traits < typename iterator_traits < InputIterator >:: value_type > ,
Allocator > ; // (1) C++17
template < class CharT ,
class Traits ,
class Allocator = allocator < CharT >>
explicit basic_string ( basic_string_view < CharT , Traits > , const Allocator & = Allocator ())
-> basic_string < CharT , Traits , Allocator > ; // (2) C++20
template < class CharT ,
class Traits ,
class Allocator = allocator < CharT >>
basic_string ( basic_string_view < CharT , Traits > ,
typename see below :: size_type ,
typename see below :: size_type ,
const Allocator & = Allocator ())
-> basic_string < CharT , Traits , Allocator > ; // (3) C++20
template < ranges::input_range R ,
class Allocator = allocator < ranges::range_value_t < R >>>
basic_string ( from_range_t , R && , Allocator = Allocator ())
-> basic_string < ranges::range_value_t < R > ,
char_traits < ranges::range_value_t < R >> ,
Allocator > ; // (4) C++23
}
概要
std::basic_stringクラステンプレートの型推論補助。
(1) : イテレータ範囲からの推論
(2) : string_viewからの推論
(3) : string_viewとpos, countからの推論
(4) : Rangeからの推論
備考
(3) : size_typeは、推論されたbasic_string型のメンバ型
例
#include <string>
#include <string_view>
#include <type_traits>
using namespace std :: string_view_literals ;
int main ()
{
// 文字列リテラルからの推論
std::basic_string s1 = "Hello" ;
static_assert ( std::is_same_v < decltype ( s1 ), std::basic_string < char >> );
// パラメータ設定済みbasic_stringからの推論
std::string s2_org = "Hello" ;
std::basic_string s2 = s2_org ;
static_assert ( std::is_same_v < decltype ( s2 ), std::basic_string < char >> );
// 文字をN回繰り返すコンストラクタからの推論
std::basic_string s3 { 3 , 'a' };
static_assert ( std::is_same_v < decltype ( s3 ), std::basic_string < char >> );
// 初期化子リストからの推論
std::basic_string s4 = { 'H' , 'e' , 'l' , 'l' , 'o' };
static_assert ( std::is_same_v < decltype ( s4 ), std::basic_string < char >> );
// イテレータ範囲からの推論。
// {s1.begin() , s1.end() } とすると、イテレータの初期化子リストと見なされてしまい、
// basic_string<decltype(s1)::iterator>型に推論されてしまうので注意
std::basic_string s5 ( s1.begin() , s1.end() );
static_assert ( std::is_same_v < decltype ( s5 ), std::basic_string < char >> );
// string_view からの推論
// explicit なので ="Hello"sv とはできない
std::basic_string s6 ( "Hello" sv );
static_assert ( std::is_same_v < decltype ( s6 ), std::basic_string < char >> );
}
出力
バージョン
言語
処理系
関連項目
参照