Vorrei verificare la mia comprensione e le conclusioni su questo argomento.Ho ragione nel dire che const_cast seguito da modifiche su un ref-to-const legato a un temporaneo va bene?
Su IRC, è stato chiesto:
È accettabile
const_cast
un riferimentoconst
che è destinato a un oggetto temporaneo?
Traducendo: ha un const ref-a-legato ad un temporaneo e vuole gettare via la sua const
-ness per modificarlo.
La mia risposta è stata che avevo chiesto a similar question in precedenza, in cui il consenso sembra essere che provvisori stessi non sono intrinsecamente const
, e quindi che si può lanciare al largo della const
-ness di un riferimento si deve a loro, e modificare loro attraverso il risultato. E, a condizione che esista ancora il riferimento originale a const
, ciò non influirà sulla durata del temporaneo.
Cioè:
int main()
{
const int& x = int(3);
int& y = const_cast<int&>(x);
y = 4;
cout << x;
}
// Output: 4
//^Legal and safe
ho ragione?
(Naturalmente, se tale codice è in realtà consigliabile è tutta un'altra cosa!)
@ Mark: Oh, un letterale potrebbe essere una cattiva scelta. Ora l'ho reso un non-letterale per questa domanda. –
Stavo per dire che non c'erano temporaries in quel codice. Fortunatamente, ho aggiornato la pagina prima di farlo :) – Gorpik
afaik (ma non riesco a trovarlo nello stadnard) dice qualcosa come "quando è stato dichiarato come const, quindi non si può castare la costanza" ... quindi la domanda è , è un letterale dichiarato come const? Non lo penso, dal momento che risulta in un oggetto temporaneo, quindi è dichiarato come const? Non ne ho idea, ma le mie budella dicono: no – PlasmaHH