que he usado a menudo punteros a const objetos, al igual que ...¿Para qué sirven los punteros const (a diferencia de los punteros para crear objetos)?
const int *p;
Eso significa simplemente que no se puede cambiar el entero que p
está señalando a través de p
. Pero también he visto referencia a punteros const, declarada como esto ...
int* const p;
Como yo lo entiendo, que significa que la variable puntero sí es constante - se puede cambiar el número entero que apunta a todo el día, pero no puedes hacer que apunte a otra cosa.
¿Qué uso posible podría tener?
Minit nitpick: para dispositivos mapeados en memoria, ciertamente (no "podría") necesitar que el elemento se marque como volátil; de lo contrario, no podría estar seguro de si el compilador realmente emitiría la operación de lectura o escritura o cuándo. –
Usted podría necesitar volátil es correcto. Puede usar 'barrier()' y otra semántica dependiendo del dispositivo. Es cierto que necesita manejar los valores cuidadosamente. Es decir, caché/no-caché, barrera, etc. Depende del tipo de dispositivo y ** volátil ** no siempre es la mejor opción. –
@MichaelBurr: estoy de acuerdo con usted en que el 'volátil' ciertamente debe estar ahí; por otro lado, muchos encabezados de proveedores de compiladores no parecen molestarse, un hecho que puede ser algo molesto (ya que incluso si los compiladores generalmente hacen lo correcto, pueden ignorar los intentos de leer un registro pero no hacer nada con el resultado). – supercat