In C ++, i letterali esistono solo nel compilatore. Sono usati in espressioni, assegnazioni e inizializzazioni. Il valore di un valore letterale può essere trovato nel programma in esecuzione se è stato usato per inizializzare una variabile o temporanea, ma il letterale stesso non lo è.
Un nome che è un riferimento a un letterale ha un significato, perché un riferimento è un valore, in modo tale che ovunque venga utilizzato il nome può essere sostituito dal valore letterale stesso. In alcuni casi speciali viene sostituito da una variabile temporanea inizializzata su quel valore e il qualificatore const richiesto protegge quella variabile per essere modificata.
Un nome che è un puntatore a un letterale non ha significato. I puntatori si riferiscono a posizioni di archiviazione e un letterale non ne ha uno.
Sarebbe ipoteticamente possibile che C ++ permetta di puntare a valori letterali e di interpretarli come puntando a una variabile temporanea inizializzata su quel valore e presumibilmente per proteggere quel valore con un qualificatore const. Il motivo per cui non è stato definito in questo modo è (a) non è molto utile (b) sarebbe incompatibile con C. Dovresti chiedere a Bjarne di quello.
Si noti che quanto sopra si applica agli interi e ai float. Le stringhe letterali hanno regole diverse, perché in molti modi sono già puntatori const.