ho notato che la QMap::operator[](const Key & key)
ha questi due overloads:Perché QMap :: operator [] (const key & key) restituisce per valore?
T & QMap::operator[](const Key & key)
const T QMap::operator[](const Key & key) const
C'è una ragione per la restituzione per valore?
E dal momento che abbiamo la semantica move:
al ritorno per valore, dovremmo mai tornare per valore const?
Il motivo per cui chiedo è questo:
Immaginiamo di avere:
class ExpensiveToCopy;
{
public:
int someProperty() const;
...
}
void f(const QMap<int, ExpensiveToCopy>& map)
{
int lala = map[4].someProperty(); // We need to copy the entire object
// just to look at someProperty();
}
Solo un * sovraccarico di ritorno di un valore, l'altro restituisce un riferimento. –
@Joachim Sì, questa è la cosa che non capisco. Non dovrebbero entrambi restituire un riferimento come ad esempio std :: vector :: operator []? –
@nurettin it * does * inibisce la semantica del movimento. – juanchopanza