Sto leggendo Accelerated C ++ e nel Capitolo 4 viene presentato il concetto di lvalue. C'è un esempio di qualcosa che non dovrebbe funzionare, ma dopo averlo provato personalmente ho scoperto che funziona davvero.
Specificamente affermano che, date queste funzioni:
// return an empty vector
vector<double> emptyvec()
{
vector<double> v;
return v;
}
// read things from an input stream into a vector<double>
// (I'm leaving out the function body here because it's irrelevant)
istream &read_things(istream& in, vector<double>& hw);
Questo non dovrebbe essere permesso:
read_stuff( cin, emptyvec() );
Perché emptyvec () è un'espressione e restituisce un oggetto temporaneo (un non-lvalue come lo hanno chiamato nel libro). Tuttavia, questo non solo compila ma effettivamente esegue (Windows 7 / VisualStudio 2010).
Quindi, cosa sta succedendo? Era solo un brutto esempio da parte degli autori, o c'è qualcos'altro che non capisco.
Grazie.