cpp*_*arr 2 c++ string constructor std c++14
为什么用这两行代码打印出不同的结果?
std::cout << std::string{6, 's'}
std::cout << std::string(6, 's')
Run Code Online (Sandbox Code Playgroud)
因为std::string
有一个构造函数取的std::initializer_list
,第一个例子将使用该构造函数来创建一个字符串对象有两个字符.像这样的初始化称为列表初始化.
第二个示例将创建一个包含六个字符的字符串对象,全部初始化为's'
.这种初始化形式称为直接初始化.
列表初始化和直接初始化可以是相同的,除了对于列表初始化禁止较大类型到较小类型的可能转换,并且如果类具有构造函数,则注意到此处std::initializer_list
.