Tamaño de cadena literal

El siguiente codigo

#include <iostream>    
using namespace std;

int main()
{
    const char* const foo = "f";
    const char bar[] = "b";
    cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
    cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
    cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}

salidas

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2

en un sistema operativo de 32 bits, compilado con GCC.

Por quesizeof Calcular la longitud de (el espacio necesario para) la cadena literal?¿La cadena literal tiene un tipo diferente (de char * o char []) cuando se le da asizeof ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta