std :: инициализатор списка строк {} vs {{}} - PullRequest
0 голосов
/ 23 мая 2018

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

int main() {

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

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

  while (true);
  return 0;
}

вывод:

0 ___ 1

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 мая 2018
std::string t1 = {{}};

совпадает с

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

Таким образом, это не пустая строка.Он содержит 1 элемент (который сам по себе является пустой строкой).

Принимая во внимание, что

std::string t2 = {};

является действительной пустой строкой.

Итак

t1 == "" --> false (0)
t2 == "" --> true (1)
0 голосов
/ 23 мая 2018
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...