提问人:av4625 提问时间:6/8/2023 最后编辑:av4625 更新时间:6/8/2023 访问量:119
使用 std::string 的大括号初始化
Curly Brace Initialisation with std::string
问:
我最近越来越多地使用大括号初始化。尽管在这种情况下,我发现圆括号初始化有所不同,但我想知道为什么。
如果我这样做:
const std::string s(5, '=');
std::cout << s << std::endl;
我得到:
=====
这是我所期望的。但如果我这样做:
const std::string s{5, '='};
std::cout << s << std::endl;
我得到:
=
为什么会这样?
编辑:为了任何看到这个的人的利益。在第二个输出之前有一个不可打印的字符。它只是没有显示在 stackoverflow 上。看来:=
答:
5赞
Ted Lyngmo
6/8/2023
#1
这
const std::string s(5, '=');
使用构造函数进行计数和字符 ch(以及分配器):
constexpr basic_string( size_type count, CharT ch,
const Allocator& alloc = Allocator() );
但
const std::string s{5, '='};
使用
constexpr basic_string( std::initializer_list<CharT> ilist,
const Allocator& alloc = Allocator() );
这意味着它将被转换为 a,因此您的字符串将具有大小 .第一个字符将具有值,另一个字符将是 。5
char
2
5
=
评论
{}
在从任何类型的列表(包括空列表或一个项目)构造时,应使用。 应该用于所有“其他”构造函数。()
=
=
=
=