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)