Diferencia entre const int*, const int * const y int * const en C++
¡Hola! Acabo de empezar a aprender C++ y estoy tratando de entender los punteros y el calificador const. Leí varios artículos, pero todavía me confundo con estas tres construcciones: `const int*`, `int * const` y `const int * const`. \n\nPor ejemplo, escribí este código:\n\n```cpp\nint value = 5;\nconst int* ptr1 = &value;\nint * const ptr2 = &value;\nconst int * const ptr3 = &value;\n```\n\nEntiendo que todas están relacionadas de alguna manera con que los datos o el puntero en sí no se pueden modificar, pero no puedo formular claramente la diferencia. Cuando intento asignar un nuevo valor mediante `*ptr1 = 10;`, el compilador se queja. Y si intento cambiar `ptr2`, por ejemplo `ptr2 = &otherValue;`, también da error. Pero `ptr1` puedo redirigirlo a otra variable, mientras que `ptr2` no. ¿Por qué? \n\nTambién quiero entender en qué casos se usa cada variante.