初始化空字符串的“”和{}有什么区别?

时间:2017-01-25 18:39:54

标签: c++ string initialization

string a = "";
string b = {};

我无法找到解释它们之间差异的好参考。编译器有不同的看法吗?那么,为什么?

2 个答案:

答案 0 :(得分:5)

a是使用复制初始化构建的。

使用复制列表初始化构建

b

对于std::string,编译器会产生相同的东西;零长度字符串。

但构造字符串的机制可能不同 - 编译器,至少在概念上,必须遍历传递给构造a的匿名临时const char []。

对于其他类型,可能存在差异;研究上述两个术语以获取更多细节。

答案 1 :(得分:2)

在这种情况下,没有区别。

string b = {};

使用类型的默认值初始化字符串,该值为空字符串。

string a = "";

使用特定值初始化字符串,该值恰好也是一个空字符串。

请注意,只需执行string c;也会创建一个空字符串。