初始化空字符串时,使用""和{}有什么区别?

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

我真的找不到一个好的参考来解释它们之间的区别。编译器是否会以不同的方式看待它们?那么,为什么呢?


http://en.cppreference.com/w/cpp/string/basic_string/basic_string - Barry
2个回答

5

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

b 是使用复制列表初始化构建的。

对于 std::string,编译器会产生同样的结果;一个长度为零的字符串。

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

对于其他类型可能存在差异,请查阅上述两个术语以获取更多详细信息。


2
在这种情况下,没有区别。
string b = {};

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

string a = "";

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

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


1
实际上可能会有所不同,在第二种情况下,编译器可能需要调用 strlen 或类似的函数来判断字符串是否为空。它可以进行优化,但很可能不会这样做。 - Slava
1
@Slava - 相反,有极高的可能性它会被优化。 - Bo Persson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接