Ho appena scritto una funzione:in che modo std :: string gestisce questo trucco?
void doSomeStuffWithTheString(const std::string& value) {
...
std::string v = value;
std::cout << value.c_str();
...
}
ma poi io chiamo questo con
doSomeStuffWithTheString("foo");
e funziona. Quindi avrei pensato che funzionasse (un const char * per inizializzare un'istanza implicita di std :: string) il valore avrebbe dovuto essere passato per valore, ma in questo caso è passato per riferimento (const).
È per caso una stringa temporanea implicita std :: string creata da const char * quando il riferimento è const? se no, allora come potrebbe funzionare?
EDIT
cosa succede se la funzione è sovraccarica di
void doSomeStuffWithTheString(const char* value);
quale sceglierà il compilatore?
Hai praticamente risposto alla tua domanda :) – pezcode
interessante, non lo sapevo. Che cosa deve avere un oggetto cosicché i costruttori impliciti avvengano su chiamate const-by-ref (e su come evitarlo?) – lurscher
Il programma è mal formato: 'std :: stringa = valore;' non è valido e dovrebbe essere rifiutato dal compilatore. –