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

Max*_*eap 3 c++ string initialization

string a = "";
string b = {};
Run Code Online (Sandbox Code Playgroud)

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

Bat*_*eba 5

a 使用复制初始化构建.

b 使用复制列表初始化构建.

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

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

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