Po latach AS3, staram się ponownie nauczyć C++. Referencje wciąż mi pasują.Wynik funkcji nie może być przekazany jako odniesienie
Rozważmy następujące funkcje:
#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;
}
Teraz, wykonując następujące czynności:
std::list<int> l = get();
f(l);
jest w porządku, ale f(get())
przyniesie następujący błąd:
"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"
Dlaczego jest to, że ? Czy to dlatego, że wynik funkcji jest niewidoczny: const
?
Tym razem wolę wiadomość błędu gcc od klang: 'błąd: niepoprawna inicjalizacja nie-const referencji typu 'std :: list> &' from tymczasowy typ 'std: : lista > '' –