Quanto segue sarà compile anche se una funzione membro const modificherà il valore di un membro. Come mai ?Perché i membri di riferimento possono essere modificati dalle funzioni membro 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;
}
Modifica ciò a cui fa riferimento il membro, non modifica il membro. –
Perché non modificherà il riferimento stesso. Dopo aver applicato l'operatore '+ =', il riferimento non cambia, solo il contenuto della stringa interna lo fa (nel contesto della stringa, 'this' è sempre lo stesso). –
Provalo con std :: string * al posto di & e vedrai la stessa cosa. – dlf