Warum definiert std :: string keine Multiplikation oder Literale? [geschlossen]

In der Sprache, in die ich zuerst eingeführt wurde, gab es eine Funktionrepeat(), das nahm eine Zeichenfolge und wiederholte esn mal. Zum Beispiel,repeat ("hi", 3) ergibt ein Ergebnis von"hihihi".

Ich habe diese Funktion schon einige Male benutzt, aber zu meinem Entsetzen habe ich in C ++ noch nie etwas Ähnliches gefunden. Ja, ich kann leicht meine eigenen erstellen oder die Verwendung vereinfachen, aber ich bin ein bisschen überrascht, dass sie noch nicht enthalten sind.

Ein Ort, an den es wirklich gut passen würde, ist instd::string:

std::string operator* (const std::string &text, int repeatCount);
std::string operator* (int repeatCount, const std::string &text);

Das würde folgende Syntax zulassen:

cout << "Repeating \"Hi\" three times gives us \"" << std::string("Hi") * 3 << "\"."

Nun, das an sich ist noch nicht allzu großartig, aber es könnte besser sein, was mich zu meinem anderen Teil bringt: den Literalen.

Jedes Mal, wenn wir die Zeichenfolgenoperatoren verwenden, wie zoperator+Wir müssen sicherstellen, dass ein Argument tatsächlich eine Zeichenfolge ist. Warum haben sie nicht einfach ein wörtliches Wort dafür definiert?""s? Literal-Suffixe, die nicht mit einem Unterstrich beginnen, sind für die Implementierung reserviert, daher sollte dies nicht zu Konflikten führen, da dies hätte hinzugefügt werden können, bevor tatsächlich jemand damit begonnen hat, eigene Suffixe zu erstellen.

Zurück zum Wiederholungsbeispiel wäre die Syntax einfach:

cout << "123"s * 3 + "456"s;

Dies würde erzeugen:

123123123456

Währenddessen könnte auch eine für Charaktere enthalten sein, um zu befriedigencout << '1's + '2's;

Warum waren diese beiden Funktionen nicht enthalten? Sie haben auf jeden Fall eine klare Bedeutung und erleichtern die Codierung, während sie weiterhin die Standardbibliotheken verwenden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage