$ 5.2.11/7 - "[Nota: A seconda del tipo di oggetto, un'operazione di scrittura attraverso il puntatore, lvalue o il puntatore al membro di dati risultante da un const_cast che getta via un const-qualifier68) può produrre comportamento non definito (7.1.5.1).]"const_cast e UB
la formulazione di questo paragrafo (C++ 03) sono sorprendente per me. Ciò che è sorprendente sono due cose.
a) In primo luogo, l'uso di "può". Perché è "possibile"? Altri posti nello standard sono molto definitivi sul comportamento non definito
b) Perché è il castare la costanza di un oggetto const originale non immediatamente 'comportamento indefinito'. Perché è necessaria una scrittura per l'attivazione di UB?
Mi riferisco ai lettori della risposta di Kaz Dragon - '7.1.5.1/4' - che penso chiarisca che questo non è UB se l'oggetto originale non è stato dichiarato' const'. La formulazione dello Standard in questo bit è incredibilmente ambigua. Ma c'è un esempio di codice scritto deliberatamente nello stesso respiro che indica che la scrittura tramite un 'const_cast'ed ref/ptr su un oggetto originariamente non' '' '' '' '' '' '' '' '', come considero più autorevole di un paragrafo con "dipendente" e "può" in esso. ;) –