Ich habe einen Code, der in seiner kleinsten vollständigen Form, der das Problem aufweist (ein guter Bürger zu sein, wenn es darum geht, Fragen zu stellen), im Wesentlichen auf Folgendes hinausläuft:
%Vor%und ich erwarte, dass es ausgegeben wird
%Vor%Stattdessen, stattdessen, bekomme ich nur:
%Vor% Warum ist das? Warum kann ich meine Zeichenfolge nicht ausgeben? Ist die Zeichenfolge leer? Ist cout
irgendwie kaputt? Bin ich verrückt geworden?
"Value was: "
ist vom Typ const char[12]
. Wenn Sie eine Ganzzahl hinzufügen, verweisen Sie effektiv auf ein Element dieses Arrays. Um den Effekt zu sehen, ändern Sie x
in 3
.
Sie müssen explizit ein std::string
konstruieren. Andererseits können Sie nicht std::string
und eine Ganzzahl verketten. Um dies zu umgehen, können Sie in ein std::ostringstream
schreiben:
Sie können keinen Zeichenzeiger und eine ganze Zahl hinzufügen (Sie können, aber es wird nicht das tun, was Sie erwarten).
Sie müssen zuerst das x in einen String konvertieren. Sie können es entweder Out-of-Band der C-Art tun, indem Sie die Itoa-Funktion verwenden, um die ganze Zahl in eine Zeichenfolge zu konvertieren:
%Vor%Oder der STD Weg mit einem Stream:
%Vor%Oder direkt in der cout-Zeile:
%Vor% Amüsant :) Das zahlen wir für die C-Kompatibilität und das Fehlen einer integrierten string
.
Wie auch immer, ich denke, der beste Weg, dies zu tun, wäre:
%Vor% Da der lexical_cast
Rückgabetyp hier std::string
ist, wird die richtige Überladung von +
ausgewählt.
C ++ verkettet Zeichenfolgen nicht mit dem Operator +. Es gibt auch keine automatische Hochstufung von Datentypen zu Zeichenketten.
In C / C ++ können Sie mit dem +
-Operator keine Ganzzahl an ein Zeichen-Array anhängen, da ein char
-Array zu einem Zeiger verfällt. Um eine int
an eine string
anzuhängen, verwenden Sie ostringstream
: