'\n'
ist ein Zeichenliteral. "\n"
ist ein String-Literal (im Grunde ein Array von Zeichen).
Der Unterschied spielt keine Rolle, wenn Sie es in einen normalen Stream schreiben. std::cout << "\n";
hat die gleiche Wirkung wie std::cout << '\n';
.
In fast jedem anderen Zusammenhang ist der Unterschied von Bedeutung. Ein char ist im Allgemeinen nicht austauschbar mit einem Array von chars oder mit einer Zeichenkette.
So zum Beispiel std::string
hat einen Konstruktor, der eine const char*
aber es hat keinen Konstruktor, der eine char
. Sie können schreiben std::string("\n");
aber std::string('\n');
lässt sich nicht kompilieren.
std::string
hat auch einen Konstruktor, der eine char
und die Anzahl der Vervielfältigungen. Es gibt keine, die eine const char*
und die Anzahl der Vervielfältigungen. Sie können also schreiben std::string(5,'\n')
und erhalten eine Zeichenfolge, die aus 5 aufeinanderfolgenden Zeilenumbrüchen besteht. Sie können nicht schreiben std::string(5, "\n");
.
Jede Funktion oder Operation, die Sie verwenden, gibt an, ob sie für ein char, für eine C-artige Zeichenkette, für beides durch Überladen oder für keines von beiden definiert ist.