Ho un paio di domande che penso sarà molto facile per qualcuno con esperienza C++ per rispondere, io grassetto le quesitons per la TL; DRstringhe C-Style per std :: string conversione chiarimento
Dato il seguente codice:
void stringTest(const std::string &s)
{
std::cout << s << std::endl;
}
int main()
{
stringTest("HelloWorld");
}
hopefuly qualcuno può segnalare l'errore nel mio processo di pensiero qui:
Perché il parametro stringTest devono essere contrassegnate const quando passata una stringa C-Style? Non c'è una conversione implicita in una stringa std :: che si verifica utilizzando il suo costruttore di stringhe cstyle, pertanto "s" non è più un riferimento a un valore letterale (e non è necessario che sia const).
Inoltre, quale sarebbe un costruttore sguardo stringa cstyle come, e in che modo il compilatore sa invocare questo dopo aver visto:
stringTest("HelloWorld");
Ha semplicemente riconoscere una stringa letterale di essere qualcosa di simile a un char * ?
Mi sono imbattuto in queste domande mentre studiavo i costruttori di copie. Un altro quesiton rapida per il mio chiarimento ...
Nel caso di qualcosa come:
std::string s = "HelloWorld";
è il costruttore della stringa cstyle utilizzato per creare un'istanza di uno std :: string temporanea, e poi la stringa temporanea è copiato in "s" usando il costruttore di string copy?:
std::string(const std::string&);
"Perché il parametro in stringTest deve essere contrassegnato const" - indipendentemente da quando è _necessario_, si desidera rendere _all_ riferimenti 'const' che non sono effettivamente modificati. – leftaroundabout
@leftaroundabout: Punto giusto, prenderò certamente questo a cuore. – Riken
possibile duplicato di [Come mai un riferimento non const non può associare a un oggetto temporaneo?] (Http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-temporary-object) –