3 votes

Dois-je utiliser un const &iterator, ou simplement un itérateur ?

Afin d'éviter les allocations inutiles de chaînes de caractères dans une classe, j'ai adopté un modèle similaire au suivant :

#include <algorithm>
using namespace std;

class Person
{
public:
    template<typename Iter>
    void GetName(Iter iter) const     // Allow for caller to provide the buffer
    {
        const char *name = ...;  // Get the name
        size_t cchName = ...;  // Get the size
        copy(&name[0], &name[cchName], iter);
    }

    string GetName() const            // Convenience method
    {
        string name;
        this->GetName(inserter(name, name.end()));
        return name;
    }
};

Cependant, le code semble également fonctionner parfaitement bien lorsque je dis

    void GetName(const Iter &iter) const     // <----- changed to const &

Y a-t-il une raison (performance ou autre) pour que j'utilise un système de gestion de l'information de l'entreprise ? const & de l'itérateur, ou dois-je simplement utiliser la fonction Iter lui-même ? (Je ne connais pas la convention pour les itérateurs, ou s'il y a des implications). (C++03)

2voto

Alok Save Points 115848

La différence ici est la même que pour le passage par valeur et le passage par référence lors de l'appel de fonctions.

Lorsque vous passez par valeur, une copie de la variable passée est créée et la fonction l'utilise.

Lorsque vous passez par référence, la copie n'est pas faite. De même, passer le type comme const le protège contre la modification à un certain niveau (bien sûr, le piratage peut le casser).

Puisque dans votre exemple de code, vous n'avez pas besoin d'itérer en utilisant l'itérateur et qu'il suffit de le passer à la fonction std::copy qui crée sa propre copie, Donc votre itérateur étant un const n'a pas d'importance, donc passer par une référence constante est une meilleure option dans votre exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X