En bref, ils sont utilisés pour ajouter 'const correctness' à votre programme.
value_type& top() { return this.item }
Il est utilisé pour fournir un accès à mutable item
. Il est utilisé pour que vous puissiez modifier l'élément dans le conteneur.
Par exemple:
c.top().set_property(5); // OK - sets a property of 'item'
cout << c.top().get_property(); // OK - gets a property of 'item'
Un exemple commun pour ce modèle est de retour un accès mutable à un élément avec vector::operator[int index]
.
std::vector<int> v(5);
v[0] = 1; // Returns operator[] returns int&.
D'autre part:
const value_type& top() const { return this.item }
Il est utilisé pour fournir l'accès à const
item
. C'est plus restrictif que la version précédente - mais il a un avantage - vous pouvez l'appeler sur un objet const.
void Foo(const Container &c) {
c.top(); // Since 'c' is const, you cannot modify it... so the const top is called.
c.top().set_property(5); // compile error can't modify const 'item'.
c.top().get_property(); // OK, const access on 'item'.
}
Pour suivre l'exemple de vecteur:
const std::vector<int> v(5, 2);
v[0] = 5; // compile error, can't mutate a const vector.
std::cout << v[1]; // OK, const access to the vector.
Vous devriez envisager d'obtenir l'un des excellents livres d'introduction énumérés dans [Le Guide du livre définitif C++ et Liste] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –
Nitpick: 'mutable' est un mot-clé C++ avec sa propre signification et n'est pas simplement le contraire de' const'. Votre question serait plus claire: "Quelle est la différence entre une fonction membre const et une fonction membre non-const?" –
@Josh - bon point sur la désambiguïsation explicite, mais je pense que 'mutable' est une description assez courante, dans les langages de programmation, de 'quelque chose que vous pouvez modifier'. – Stephen