Possibile duplicato:
riferimenti costanti con typedef e template in c ++
Si prega di guardare il seguente codice:
typedef wstring& RT;
RT Change(const RT v)
{
v += L"234"; // why can I change this argument???
return v;
}
int _tmain(int argc, _TCHAR* argv[])
{
wstring str = L"111";
wstring &str2 = Change(str);
return 0;
}
Sono rimasto sorpreso dal fatto che l'argomento "v" nella funzione "Modifica" possa essere modificato. Perdiamo il modificatore "const". Metafunzioni come std :: add_const non aiutano, potresti spiegare questo comportamento?
Strumento: VS2010
risposte:
4 per risposta № 1È una specie di precedenza in un'espressione. Quando dici
const wstring & foo;
fa riferimento a una costante tensione. Puoi pensarlo in questo modo:
(const wstring) & foo;
Quando crei un typedef, hai effettivamente cambiato la precedenza.
const RT foo;
const wstring & foo; // not equivalent, RT is a typedef, not a macro
const (wstring &) foo; // this is effectively what happens
La const rende il foo const, non ciò a cui fa riferimento il foo.
Naturalmente, come sottolinea FredOverflow, una constil riferimento è ridondante, poiché non è possibile assegnare a un riferimento, solo all'oggetto a cui fa riferimento. Quindi il risultato è che foo è solo un semplice riferimento.