Ce qui suit sera compile même si une fonction membre const modifie la valeur d'un membre. Comment ?Pourquoi les membres de référence peuvent-ils être modifiés par des fonctions membres const?
#include <iostream>
struct foo
{
std::string &str;
foo(std::string &other) : str(other) {}
void operator()(std::string &some) const
{
str += some;
}
};
int main()
{
std::string ext("Hello");
foo a{ ext };
std::string more(" world!");
a(more);
cout << a.str;
return 0;
}
Il modifie ce à quoi le membre se réfère, il ne modifie pas le membre. –
Parce qu'il ne modifiera pas la référence elle-même. Après avoir appliqué l'opérateur '+ =', la référence ne change pas, seul le contenu de la chaîne interne le fait (dans le contexte de la chaîne, 'this' est toujours le même). –
Essayez-le avec std :: string * au lieu de & et vous verrez la même chose. – dlf