C++ 什么';这两者之间的区别是什么&引用;和{}初始化空字符串?

C++ 什么';这两者之间的区别是什么&引用;和{}初始化空字符串?,c++,string,initialization,C++,String,Initialization,我真的找不到一个好的参考书来解释他们之间的区别。编译器对它们有不同的看法吗?那么,为什么呢?在这种情况下,没有区别 string a = ""; string b = {}; 使用类型的默认值(空字符串)初始化字符串 string b = {}; 使用特定值初始化字符串,该值恰好也是空字符串 string b = {}; 注意,只需执行字符串c还将创建一个空字符串。使用副本初始化构造一个 string b = {}; b是使用复制列表初始化构建的 对于std::string编译器将生成相

我真的找不到一个好的参考书来解释他们之间的区别。编译器对它们有不同的看法吗?那么,为什么呢?

在这种情况下,没有区别

string a = "";
string b = {};
使用类型的默认值(空字符串)初始化字符串

string b = {};
使用特定值初始化字符串,该值恰好也是空字符串

string b = {};

注意,只需执行
字符串c
还将创建一个空字符串。

使用副本初始化构造一个

string b = {};
b
是使用复制列表初始化构建的

对于
std::string
编译器将生成相同的内容;长度为零的字符串

但是构造字符串的机制可能完全不同——至少在概念上,编译器必须遍历传递给构造字符串的匿名临时常量char[]


对于其他类型,可能存在差异;研究上面的两个术语以了解更多细节。

实际上可能存在差异,在第二种情况下,编译器可能需要调用
strlen
或类似的东西来实现字符串为空。它可以被优化,但很有可能不会被优化。@Slava-相反,它会被优化。