¿Cuándo usar const * versus const * const?

He visto un código donde la gente usará const como parámetro para la función. ¿Cuáles son los beneficios de usar const * vs const * const? Esta podría ser una pregunta muy básica, pero apreciaría si alguien pudiera explicarlo.

Bool IsThisNumberEqualToFive(int const * num) { return(Bool)(5 != num ); } Bool IsThisNumberEqualToFive(int const * const num) { return(Bool)(5 != num ); } 

  • En la primera versión, prometes que no vas a escribir en el objeto que num señala a
  • En la segunda versión prometes eso y también te evitas (es decir, IsThisNumber …) hacer que los num apunten a otra cosa.

Es decir, en la segunda versión, el puntero en sí también es const , además del pointee.

Para el parametro

 int const * num // num is a pointer to const int. 

const está protegiendo los puntos num El progtwig puede alterar el valor de num pero no *num . Mientras que para

 int const * const num // num is a const pointer to const int 

leftmost const está protegiendo los puntos num mientras que la derecha está protegiendo el puntero num it self. En este caso, ni num ni *num se van a modificar.

NOTA: Entendiendo lo que hace

 T const *p; // T is any valid type 

medios (más precisamente).
Esto significa que, un progtwig puede usar la expresión p para alterar el valor del objeto puntero que p designa, pero no puede usar la expresión *p para alterar el valor de cualquier objeto que *p pueda designar. Si el progtwig tiene otra expresión e de tipo no calificado que designa un objeto que también designa *p , el progtwig aún puede usar e para cambiar ese objeto .

Cuanto más le digan las fonts al comstackdor qué ocurrirá con los valores de las variables (o, mejor aún, ” no sucederá” como se esperaría para las variables const ), mejor será la opción del comstackdor.