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

时间:2018-05-23 09:52:10

标签: string c++17 list-initialization

所以我一直在谷歌搜索和搜索这个网站,但我很难找到以下代码的答案,并希望有更多的列表初始化程序知识的人可以帮助我了解正在发生的事情上。

int main() {

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

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

  while (true);
  return 0;
}

输出:

0 ___ 1

任何人都可以解释{}和{{}}之间的差异吗?

由于

2 个答案:

答案 0 :(得分:3)

std::string t1 = {{}};

"初始化一个字符串,其中一个元素为空(0,因为它是char,内置类型)"

std::string t2 = {};

"使用空字符串"

初始化字符串

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

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

答案 1 :(得分:0)

std::string t1 = {{}};

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

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

然而,

std::string t2 = {};

是一个实际的空字符串。

所以

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