2010-04-30 12 views
11

En C++ cuál es la diferencia entre char const *ptr=&ch; y const char *ptr=&ch;Declaración de punteros en C++

+1

No hay diferencia, para obtener más información: http://duramecho.com/ComputerInformation/WhyHowCppConst.html – Akanksh

+1

posible duplicado de http://stackoverflow.com/questions/2211954/difference-between-these-two-const -pointer-declarations-c – starblue

+1

Además, puede usar [cdecl.org] (http://cdecl.org) – bashor

Respuesta

32

Son lo mismo, es decir pointer to const char.

Sin embargo char * const ptres diferente, que es const pointer to (non-const) char.

Y solo para completar el conjunto, const char * const ptr es un const pointer to const char.

+2

+1. Respuesta completa. – ereOn

+1

Este es un buen ejemplo de agueing a favor de poner el 'const' calificado * después de * el tipo calificado. 'char const *' parece extraño para muchas personas, pero es consistente con 'char const * const'. –

7

No hay diferencia en C++.

Es importante const es anterior a * o después de *.

6

Const se aplica a lo que está a su izquierda inmediata (que no sea si no hay nada allí, en cuyo caso se aplica a lo que sea su derecho inmediato). Entonces no hay diferencia

char * const ptr Sin embargo, sería un indicador de const a valor variable.

2

Otras respuestas han cubierto la solución técnica: sus dos ejemplos son los mismos.

Muchas personas prefieren leer de derecha a izquierda cuando se trata de const en C++. En inglés, nos gusta pensar en una X constante, mientras que a C++ le gusta analizar una X const. Leer de derecha a izquierda produce un resultado más inglés.

Un ejemplo extremo:

C const * bar(A * const, B const * const) const; 

De derecha a izquierda esto se lee como 'una función constante bar tomando como parámetros un puntero constante a un A y un puntero constante a una constante B, devolviendo un puntero a una constante C '. Tenga en cuenta que los tres tipos de punteros son diferentes.

+1

Si alguien está interesado, el libro "C++ Gotchas" de Stephen C. Dewhurst habla sobre esta técnica de declarar punteros. – TheJuice

0

char const *ptr=&ch; y const char *ptr=&ch; significa que char es const, mientras que el puntero es variable (o puede cambiarse).

Pero en el caso de char * const ptr, no puede volver a asignar el puntero una vez que lo configuró. entonces es un puntero de const a una cadena de caracteres.