2012-09-20 5 views
18

Estoy confundido acerca del tipo de datos de una cadena literal. ¿Es un const char * o un const char? Las apreciaciones son apreciadas. GraciasC++ ¿cuál es el tipo de datos de la cadena literal?

+0

Ver mi respuesta http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097 a una pregunta similar. – PiotrNycz

+11

a juzgar por el número de personas que tienen este error (pensando que es const char *) No veo por qué esto se está rechazando. Aparentemente es una muy buena pregunta cuando la mitad de los encuestados no sabe la respuesta. – WhozCraig

+5

@CraigNelson, he visto demasiadas personas con 10s de k de representantes que se equivocan en el último tiempo. – chris

Respuesta

25

Es un const char[N] (que es lo mismo como char const[N]), donde N es la longitud de la cadena más uno para el NUL terminación (o simplemente la longitud de la cadena si se define la "longitud de una cadena "como ya se incluye el NUL).

Es por eso que puede hacer sizeof("hello") - 1 para obtener el número de caracteres en la cadena (incluidos los incrustados NUL s); si fuera un puntero, no funcionaría porque siempre sería el tamaño del puntero en su sistema (menos uno).

+6

Para respaldarlo *, un literal de cadena estrecho tiene el tipo "matriz de n const char", donde n es el tamaño de la cadena como se define a continuación y tiene duración de almacenamiento estático (3.7). * – chris

+1

Atención a los usuarios a cargo ? –

+0

No I. Después de ver el golpeteo épico, he expresado abundantemente los votos sobre esta cuestión. Las respuestas, bueno, esa es otra historia ... =) – WhozCraig

7

"Hello world" es const char[12] (once caracteres más '\0' terminador).

L"Hello world" es const wchar_t[12].

Y desde C++ 14, "Hello world"s es std::string.

Tenga en cuenta también las notaciones literales u8"", u"" y U"" de cadena añadidos por C++ 11, que especifican UTF-8, UTF-16 y UTF-32 de codificación, respectivamente. La codificación de literales de cadena no calificados (es decir, "" y L"") está (y siempre fue) definida por la implementación.

Cuestiones relacionadas