cout und String-Verkettung
Ich war nur die überprüfung meiner C++. Ich habe versucht, dies zu tun:
#include <iostream>
using std::cout;
using std::endl;
void printStuff(int x);
int main() {
printStuff(10);
return 0;
}
void printStuff(int x) {
cout << "My favorite number is " + x << endl;
}
Das problem tritt in der printStuff
Funktion. Wenn ich es laufen, die ersten 10 Zeichen von "Meine Lieblings Nummer ist ", fehlt in der Ausgabe. Die Ausgabe "e-Nummer ". Die Nummer gar nicht auftauchen.
Die Möglichkeit dieses Problem zu beheben ist zu tun
void printStuff(int x) {
cout << "My favorite number is " << x << endl;
}
Frage ich mich, was der computer/compiler tut hinter den kulissen.
InformationsquelleAutor t3hdaniel | 2016-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine einfache Zeiger-Arithmetik. Das string-literal ist ein array oder
char
s und vorgestellt, als ein Zeiger. Fügen Sie 10, um den Zeiger zu erzählen, die Sie ausgeben möchten ab dem 11 Zeichen.Es gibt keine " + " - operator, würde das konvertieren einer Zahl in einen string und verkettet Sie zu einem char-array.
InformationsquelleAutor Sami Kuhmonen
+ Überladene operator in diesem Fall ist nicht die Verkettung beliebiger string, da x eine ganze Zahl ist. Die Ausgabe verschoben wird, die durch rvalue-Zeiten in diesem Fall. Also die ersten 10 Zeichen werden nicht gedruckt. Überprüfen Sie diese Referenz.
wenn Sie schreiben,
wird es funktionieren
InformationsquelleAutor Ajay Pal
addieren oder Inkrementieren eines string nicht erhöhen Sie den Wert, den es enthält, aber es ' s Adresse:
es ist nicht problem der msvc 2015 oder cout, sondern es bewegt sich in memory zurück/vorwärts:
beweisen Sie, dass cout unschuldig ist:
InformationsquelleAutor Raindrop7