'\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.
'" \ n "' es un 'const char [2]', no un 'const char *'. Sin embargo, el primero es implícitamente convertible al último. – GManNickG
@GMan: se arregló. Gracias – rubenvb