Perché il seguente codice viene compilato? Compila e funziona bene con clang e stampe first.
Ma, credo che il comportamento corretto dovrebbe essere quello di lamentarsi e rilasciare un errore corretto.C++ Comportamento errato dell'inizializzazione std :: string
#include <iostream>
#include <string>
int main()
{
std::string s{ "first", "second" };
std::cout << s << std::endl;
}
Questa domanda si ispira this.
È perché la "prima" stringa ha un implicito "\ 0" alla fine di esso .... che dice all'oggetto 'stringa' di smettere di cercare altri caratteri (anche se probabilmente lo sta ancora assegnando completamente memoria del "secondo" a) – DarthRubik
@DarthRubik: No. Questo non è ciò che sta accadendo. –
Il problema di fondo è lo stesso di [questa domanda] (https://stackoverflow.com/questions/24112281/c11-initializer-list-fails-but-only-on-lists-of-length-2). – chris