使用"()"调用构造函数与"{}"不同

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)

Som*_*ude 8

因为std::string有一个构造函数取的std::initializer_list,第一个例子将使用该构造函数来创建一个字符串对象有两个字符.像这样的初始化称为列表初始化.

第二个示例将创建一个包含六个字符的字符串对象,全部初始化为's'.这种初始化形式称为直接初始化.

列表初始化和直接初始化可以是相同的,除了对于列表初始化禁止较大类型到较小类型的可能转换,并且如果类具有构造函数,则注意到此处std::initializer_list.

  • 统一初始化*大多数*统一;) (4认同)
  • @ 6EQUJ5 - 这不是世界末日. (2认同)