std::string 列表初始值设定项 {} 与 {{}}

std::string list initializer {} vs {{}}

所以我一直在谷歌上搜索和搜索这个网站,但我正在努力寻找以下代码的答案,希望对列表初始化程序有更多了解的人可以帮助我理解发生了什么上。

int main() {

  std::string t1 = {{}};
  std::string t2 = {};

  printf("%u ___ %u", "" == t1, "" == t2 );

  while (true);
  return 0;
}

输出:

0 ___ 1

谁能解释一下 {} 和 {{}} 之间的区别是什么?

谢谢

std::string t1 = {{}};

"initialize a string with one element which is empty (0, since it's char, built in type)"

std::string t2 = {};

"initialize a string with an empty string"

尝试添加这些行以获得证据:

std::cout << t1.size() << std::endl;
std::cout << (int)t1[0] << std::endl;
std::cout << t2.size() << std::endl;
std::string t1 = {{}};

相同
std::string t1 = {std::string{}};

因此它不是一个空字符串。它确实包含 1 个元素(它本身是一个空字符串)。

然而,

std::string t2 = {};

是一个实际的空字符串。

所以

t1 == "" --> false (0)
t2 == "" --> true (1)