¿Dónde y cómo se almacenan las constantes?

Leí esta pregunta deaquíy también leí preguntas relacionadas dec-faq pero no entiendo la razón exacta detrás de esto: -

#include <iostream>

    using namespace std;

    int main()
    {
        //const int *p1 = (int*) &(5);  //error C2101: '&' on constant
        //cout << *p1;

        const int five = 5;
        const int *p2 = &(five);
        cout << *p2 << endl;

        char *chPtr = (char*) &("abcde");
        for (int i=0; i<4; i++) cout << *(chPtr+i);
        cout << endl;
        return 0;
    }

Me preguntaba cómo se almacenan las constantes, enteras o literales. Mi comprensión de los literales de cadena es que se crean enmemoria estática global al inicio del programa y persistir hasta la salida del programa. En el caso de"abcde" a pesar de que no le di un nombre variable, puedo tomar su dirección (chPtr) y supongo que probablemente podría desreferenciarchPtr en cualquier momento antes de la finalización del programa y los valores de los caracteres seguirían allí, incluso si lo desreferencia fuera del alcance donde se declaró. Es elconst int variable"five" También se coloca en estática global y esa direcciónp2 también se puede hacer referencia en cualquier momento?

¿Por qué puedo tomar la dirección de"five" pero no puedo pedir:&(5) ? Son las constantes"5" y"five" almacenado de manera diferente? y donde"5" se almacena en la memoria?

Respuestas a la pregunta(3)

Su respuesta a la pregunta