2010-10-26 31 views
9

He visto la nueva línea \n utilizada de 2 maneras diferentes en algunos ejemplos de código que he estado viendo. El primero es '\n' y el segundo es "\n". ¿Cuál es la diferencia y por qué usaría el '\n'?¿Cuál es la diferencia entre ' n' o " n" en C++?

Entiendo que '\n' representa un carácter y "\n" representa una cadena, pero ¿esto importa?

Respuesta

25

'\n' es una constante de caracteres.

"\n" es un puntero al array de caracteres equivalentes a {'\n', '\0'} (\n más el terminador nulo)

EDITAR

realizo me explicó la diferencia, pero no respondió a la pregunta.

El que uses depende del contexto. Utiliza '\n' si está llamando a una función que espera un carácter, y "\n", si espera una cadena.

1

Las comillas simples indican un carácter y las comillas dobles indican una cadena. Dependiendo del contexto, puede elegir con qué tipo de datos trabajar.

2

'\n' es un char constante.

es const char[2].

Así que el uso es algo como esto:

char newLine = '\n'; 
const char* charPointerStringNewLine = "\n"; // implicit conversion 
const char charStringNewLine[2] = "\n"; 

string stringNewLine("\n"); 

Así que en resumen: uno es un puntero a una matriz de caracteres, el otro es un solo carácter.

+1

'" \ n "' es un 'const char [2]', no un 'const char *'. Sin embargo, el primero es implícitamente convertible al último. – GManNickG

+0

@GMan: se arregló. Gracias – rubenvb

8

'\n' es un carácter literal. "\n" es un literal de cadena (una matriz de caracteres, básicamente).

La diferencia no importa si la está escribiendo en un flujo ordinario. std::cout << "\n"; tiene el mismo efecto que std::cout << '\n';.

En casi cualquier otro contexto, la diferencia importa. Un char no es en general intercambiable con una matriz de caracteres o con una cadena.

Por ejemplo, std::string tiene un constructor que toma un const char*, pero no tiene un constructor que toma un char. Puede escribir std::string("\n");, pero std::string('\n'); no compila.

std::string también tiene un constructor que toma un char y el número de veces para duplicarlo. No tiene uno que tome un const char* y el número de veces para duplicarlo. Entonces puede escribir std::string(5,'\n') y obtener una cadena que consta de 5 caracteres de línea nueva en una fila. No puedes escribir std::string(5, "\n");.

Cualquier función u operación que utilice le dirá si está definida para un carácter, una cadena estilo C, tanto por sobrecarga como para ninguna de las dos.

+0

typo! Olvidé la barra en el segundo caso: 'std :: cout << '\ n';'. – leoger

+1

@leo grrr: gracias, pero te gané a eso :-) –

0

Entiendo que '\ n' representa un carácter y "/ n" representa una cadena, pero ¿esto importa?

Si entiende esto, entonces debe quedar claro que sí importa. Las funciones sobrecargadas en la biblioteca estándar de C++ a menudo ocultan este hecho, así que tal vez un ejemplo de C sea más útil: putchar toma un solo carácter, por lo que solo '\n' es correcto, mientras que y printf toman una cadena, y en ese caso, solo "\n" es correcto.

Cuestiones relacionadas