¿por qué puedo asignar literales de cadena a un puntero char * [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es el tipo de literales de cadena en C y C ++? 4 respuestas

Creo que los literales de cadena enc++ es el tipo deconst char*. Y no puedes asignarconst char* objeto a unanon-constant char* objeto. Pero en Visual Studio 2010. El siguiente código puede compilarse sin errores ni advertencias, lo que sin embargo generará un error de tiempo de ejecución.

int main(void)
{      
    char *str2 = "this is good";
    str2[0] = 'T';
    cout << str2;
    getchar();
    return 0;
}

Y si no modificamos el valor de la cadena, leer el valor está bien:

for(char *cp = str2; *cp !=0; ++cp) {
    printf("char is %c\n", *cp);
}
getch();
return 0;

Entonces, ¿por qué podemos asignar un const char * a un char * aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta