Dopo anni di AS3, sto cercando di imparare di nuovo il C++. I riferimenti mi stanno ancora dando i risultati.Il risultato della funzione non può essere passato come riferimento
considerare le seguenti funzioni:
#include <cstdio>
#include <list>
void f(std::list<int>& v) {
for (std::list<int>::iterator i = v.begin(); i != v.end(); ++i)
printf("Hello %d\n", *i);
}
std::list<int> get(void) {
std::list<int> list;
list.push_back(0);
return list;
}
Ora, effettuando le seguenti operazioni:
std::list<int> l = get();
f(l);
va bene, ma f(get())
produrrà il seguente errore:
"no matching function for call to 'f'", "candidate function not viable: no known conversion from `'std::list<int>' to 'std::list<int>&' for 1st argument"
Perché è ? È perché il risultato di una funzione è invisibilmente const
?
Per una volta preferisco messaggio di errore di gcc per clang di: 'errore: l'inizializzazione non valido di riferimento non-const di tipo 'std :: list> &' da una temporanea di tipo 'std: : list > '' –