2012-04-05 27 views
11

En uno de los programas en C++, vi un prototipo de la función: int Classifier::command(int argc, const char*const* argv)C++: Significado de const char * const *

¿Qué significa const char*const* argv? ¿Es lo mismo que const char* argv[]? ¿Significa const char** argv lo mismo?

+7

http://cdecl.org/ –

+1

@LuchianGrigore sí, lo consiguió –

+1

Read (principalmente) de derecha a izquierda, puntero a un puntero constante a (const char) . –

Respuesta

5

No, no es lo mismo que const char *argv[]. El const prohíbe modificaciones del valor sin referencia a nivel particular de eliminación de referencias:

**argv = x; // not allowed because of the first const 
*argv = y; // not allowed because of the second const 
argv = z; // allowed because no const appears right next to the argv identifier 
3

De C++ FAQ Lite:

Fred const * const p significa "p es un puntero constante a una constante Fred": no se puede cambiar el propio puntero P, ni se puede cambiar el objeto a través de Fred p .

const char * const * es la misma que char const * const *: a (no const) puntero a un puntero const a un char const.

const char * es lo mismo que char const *: un puntero (sin const) a un const char.

const char * * es lo mismo que char const * *: un puntero (sin const) a un puntero (sin const) a un const char.

3

Un puntero que no cambia a una cadena que no cambia:

const char* aString ="testString"; 

aString[0] = 'x'; // invaliv since the content is const 
aString = "anotherTestString"; //ok, since th content doesn't change 

const char const* bString = "testString"; 
bString [0] = 'x'; still invalid 
bString = "yet another string"; // now invalid since the pointer now too is const and may not be changed. 
3

const char*const* argv significa "puntero a puntero constante a constante char ". No es "lo mismo" que const char *argv[], pero es compatible en cierta medida:

void foo(const char *const *argv); 

void bar(const char **argv) 
{ 
    foo(argv); 
} 

compila bien. (A la inversa no se compilará sin const_cast.)