Ho deciso di verificare se assegnare un riferimento a un membro renderebbe un membro un riferimento. Ho scritto il seguente frammento per testarlo. Esiste una classe semplice Wrapper
con un std::string
come variabile membro. Prendo uno const string&
nel costruttore e lo assegno alla variabile membro pubblico. Più tardi nel metodo main()
modifico la variabile membro ma il string
passato al costruttore rimane invariato, come mai? Penso che in Java la variabile sarebbe cambiata, perché non in questo frammento di codice? Come funzionano esattamente le referenze in questo caso?Passaggio tramite riferimento a un costruttore
#include <iostream>
#include <string>
using namespace std;
class Wrapper
{
public:
string str;
Wrapper(const string& newStr)
{
str = newStr;
}
};
int main (int argc, char * const argv[])
{
string str = "hello";
cout << str << endl;
Wrapper wrapper(str);
wrapper.str[0] = 'j'; // should change 'hello' to 'jello'
cout << str << endl;
}
I tipi in C++ sono ciò che decreta e non diventano magicamente altro. Tu dici 'stringa' e ottieni una' stringa'. Se volessi un riferimento, avresti detto 'stringa &'. –
Hai abusato di persone con una domanda troppo semplice :) – Mikhail
In Java la variabile non sarebbe stata modificata perché il codice non sarebbe stato compilato; le stringhe in Java non possono essere modificate. –