std::string
initializer_list
引数を取るコンストラクタがあります。
basic_string( std::initializer_list<CharT> init,
const Allocator& alloc = Allocator() );
を構築するために波括弧初期化リストを使用する場合、そのコンストラクターは常に優先されstd::string
ます。その他のコンストラクターは、 braced-init-list内の要素が 内の要素の型に変換できない場合にのみ考慮されinitializer_list
ます。これは[over.match.list]/1に記載されています。
最初は、候補関数はクラスの初期化子リスト コンストラクター ([dcl.init.list]) でT
あり、引数リストは単一の引数としての初期化子リストで構成されます。
あなたの例では、最初の引数5
は暗黙的に に変換可能char
であるため、initializer_list
コンストラクターは実行可能であり、選択されます。
これは、文字列内の各文字をint
sとして出力すると明らかです
void print(char const *prefix, string& s)
{
cout << prefix << s << ", size " << s.size() << ": ";
for(int c : s) cout << c << ' ';
cout << '\n';
}
string str1 {"aaaaa"};
string str2 {5, 'a'};
string str3 (5, 'a');
print("str1: ", str1);
print("str2: ", str2);
print("str3: ", str3);
出力:
str1: aaaaa, size 5: 97 97 97 97 97
str2: a, size 2: 5 97
str3: aaaaa, size 5: 97 97 97 97 97
ライブデモ