12 Stimmen

Was ist der Unterschied zwischen ' \n ' oder " \n " in C++?

Ich habe die neue Linie gesehen \n in einigen Codebeispielen, die ich mir angesehen habe, auf 2 verschiedene Arten verwendet. Die erste ist '\n' und das zweite ist "\n" . Worin besteht der Unterschied und warum sollten Sie die '\n' ?

Ich verstehe die '\n' steht für ein Zeichen und "\n" eine Zeichenkette darstellt, aber ist das wichtig?

25voto

mikerobi Punkte 19791

'\n' ist eine Zeichenkonstante.

"\n" ist ein Zeiger auf ein Zeichenarray, das der {'\n', '\0'} ( \n plus dem Nullterminator)

EDITAR

Mir ist klar, dass ich den Unterschied erklärt, aber die Frage nicht beantwortet habe.

Welche Sie verwenden, hängt vom jeweiligen Kontext ab. Sie verwenden '\n' wenn Sie eine Funktion aufrufen, die ein Zeichen erwartet, und "\n" wenn es eine Zeichenkette erwartet.

9voto

Steve Jessop Punkte 264569

'\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.

2voto

rubenvb Punkte 71669

'\n' es un char konstant.

"\n" es un const char[2] .

Die Verwendung ist also in etwa so:

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

string stringNewLine( "\n" );

Kurz gesagt: Das eine ist ein Zeiger auf ein Zeichenarray, das andere ist ein einzelnes Zeichen.

1voto

Hollister Punkte 3568

Einfache Anführungszeichen stehen für ein Zeichen und doppelte Anführungszeichen für eine Zeichenfolge. Je nach Kontext können Sie wählen, mit welchem Datentyp Sie arbeiten möchten.

0voto

casablanca Punkte 68114

Ich verstehe die ' \n ' steht für ein Zeichen und "/n" für eine Zeichenkette, aber ist das wichtig?

Wenn Sie das verstanden haben, dann sollte es klar sein, dass es tatsächlich eine Rolle spielt. Überladene Funktionen in der C++-Standardbibliothek verbergen diese Tatsache oft, so dass ein Beispiel aus C vielleicht nützlicher ist: putchar ein einzelnes Zeichen, also nur '\n' korrekt ist, während puts y printf eine Zeichenkette nehmen, und in diesem Fall nur "\n" ist richtig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X