J'ai défini la classe suivante:Y a-t-il un avantage à utiliser un argument de référence dans cette fonction?
class Action
{
public:
Action(){ _bAllDone = false; }
void AddMove(Move & m);
private:
std::deque<Move> _todo;
bool _bAllDone;
};
Le membre AddMove est défini comme suit:
void Action::AddMove(Move & m)
{
_todo.push_back(m);
}
J'ai noté que, sans l'argument de référence à cette fonction, le constructeur copie a été appelée deux fois, whereeas avec un argument de référence, il n'a été appelé qu'une seule fois. Est-ce que appeler un constructeur de copie seulement une fois au lieu de deux fois une bonne raison d'utiliser un argument de référence?
Une bonne réponse, et +1 pour le passer comme const. –
Une autre raison importante (je dirais la raison la plus importante, IMO, si votre code est déjà conçu pour ne pas modifier la référence) pour passer par référence à const est de permettre aux temporaires d'être acceptés comme paramètres (par exemple 'action.AddMove (Move (/ * ... * /)); 'est valide si' AddMove' prend un 'const Move &', mais est invalide s'il ne prend qu'un 'Move &') – GRB