Diferença entre const int*, const int * const e int * const em C++
Olá! Comecei a estudar C++ e estou tentando entender ponteiros e o qualificador const. Li alguns artigos, mas ainda me confundo com essas três construções: `const int*`, `int * const` e `const int * const`.\n\nPor exemplo, escrevi este código:\n\n```cpp\nint value = 5;\nconst int* ptr1 = &value;\nint * const ptr2 = &value;\nconst int * const ptr3 = &value;\n```\n\nEntendo que todas estão relacionadas a não poder modificar os dados ou o próprio ponteiro, mas não consigo formular claramente a diferença. Quando tento atribuir um novo valor com `*ptr1 = 10;`, o compilador reclama. E se tento alterar `ptr2`, por exemplo `ptr2 = &otherValue;`, também dá erro. Mas `ptr1` posso redirecionar para outra variável, e `ptr2` não. Por quê?\n\nTambém quero entender em quais casos usar cada opção. Talvez haja alguma regra mnemônica para lembrar? Agradeço uma explicação detalhada com exemplos.