c++ - 使用 "()"调用构造函数不同于 "{}"

标签 c++ string constructor c++14 std

为什么这两行代码打印出不同的结果?

std::cout << std::string{6, 's'}
std::cout << std::string(6, 's')

最佳答案

因为 std::string有一个constructor服用std::initializer_list ,第一个示例将使用该构造函数创建一个包含两个字符的字符串对象。这样的初始化称为 list initialization .

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

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

关于c++ - 使用 "()"调用构造函数不同于 "{}",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760139/

相关文章:

c++ - 在 cpp 文件中使用内联命名空间的类型在 MSVS 中不起作用

c - K&R 1.19 练习 ("reverse"函数)

C++ 当我离开默认构造函数时,我的初始化字符串消失了,但我的其他成员变量值却没有

java - 隐式 super 构造函数 Person() 未定义。必须显式调用另一个构造函数?

c++ - 编译器是否每次都实例化默认构造函数和复制构造函数以及复制赋值运算符?

c++ - 为什么不能 move 这些变量?

c++ - 跟踪目标问题的均值漂移算法计算搜索窗口的质心更新

c++ - 如何设置 Clang 以使用 MinGW libstdc++

javascript - 将 HTML 响应转换为数组或 NodeJS 中的对象

r - 条形图 : NA vs empty strings