Ich lese Accelerated C ++ von Koenig. Er schreibt: "Die neue Idee ist, dass wir + verwenden können, um einen String und ein String-Literal zu verketten - oder zwei Strings (aber nicht zwei String-Literale).
Gut, das macht wohl Sinn. Nun zu zwei getrennten Übungen, die dies beleuchten sollen.
Sind die folgenden Definitionen gültig?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Jetzt habe ich versucht, das oben genannte auszuführen und es hat funktioniert! Also war ich glücklich.
Dann versuchte ich die nächste Übung zu machen;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Das hat nicht funktioniert. Jetzt verstehe ich, dass es etwas damit zu tun hat, dass Sie nicht zwei String-Literale verketten können, aber ich verstehe den semantischen Unterschied nicht, warum ich es geschafft habe, das erste Beispiel zum Laufen zu bringen (ist nicht ", world" und "! "zwei String-Literale? Sollte das nicht funktioniert haben?), aber nicht das zweite.
"Hello" + ", world!"
wenn Sie können "Hello, world!"
. Wie üblich bietet C ++ eine fantastische und einfache Problemumgehung für ein wahrgenommenes Problem. :-)
"Hello" ", world!"
(ohne das +
). Es gibt eine Reihe von Beschwerden, die man über C ++ machen könnte, aber ich denke nicht, dass die Behandlung hier eine davon ist. Es ist genau das Gleiche, als ob Sie geschrieben 1 / 3 + 1.5
und sich beschwert hätten, weil die Teilung eine integrale Teilung war. Zum Guten oder zum Schlechten funktionieren die meisten Sprachen so.
"hello" " world" == "hello world"
nützlich, wenn Sie eine lange Zeichenfolge schreiben müssen und nicht möchten, dass sie aus Ihrem Fenster verschwindet, oder wenn Sie sich innerhalb einer Zeilenlängenbeschränkung befinden möchten. Oder wenn eine der Zeichenfolgen in einem Makro definiert ist.
const string message = "Hello" ",world" + exclam
(zB das erste weglassen+
) sollte gut funktionieren.