Dlaczego poniższy kod się kompiluje? Kompiluje się i działa dobrze z klang i wydrukami. first.
Uważam jednak, że prawidłowe zachowanie powinno polegać na skargach i wydawaniu prawidłowego błędu.C++ Niepoprawne zachowanie inicjalizacji std :: string
#include <iostream>
#include <string>
int main()
{
std::string s{ "first", "second" };
std::cout << s << std::endl;
}
To pytanie powstało pod inspiracją this.
Dzieje się tak dlatego, że "pierwszy" ciąg ma niejawne "\ 0" na końcu .... które powoduje, że obiekt 'string' przestaje szukać więcej znaków (mimo że prawdopodobnie nadal przydziela pełne pamięć "drugiego" do) – DarthRubik
@DarthRubik: Nie. To nie jest to, co się dzieje. –
Podstawowy problem jest taki sam jak [to pytanie] (https://stackoverflow.com/questions/24112281/c11-initializer-list-fails- but-only-on- list-- length-2). – chris