std:: инициализатор списка строк {} vs {{}}

Так что я занимался поиском и поиском на этом сайте, но я изо всех сил пытаюсь найти ответ на следующий код и надеюсь, что кто-то с большим знанием инициализатора списка может помочь мне понять, что происходит.

int main() {

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

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

  while (true);
  return 0;
}

выходы:

0 ___ 1

Кто-нибудь может объяснить, в чем разница между {} и {{}} для этого?

Спасибо

2 ответа

Решение
std::string t1 = {{}};

msgstr "инициализировать строку одним пустым элементом (0, так как это char, встроенный тип)"

std::string t2 = {};

"инициализировать строку пустой строкой"

Попробуйте добавить эти строки, чтобы иметь доказательства этого:

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)
Другие вопросы по тегам