Dlaczego std :: string nie definiuje mnożenia lub literałów? [Zamknięte]

W języku, w którym po raz pierwszy zostałem wprowadzony, istniała funkcjarepeat(), który wziął sznurek i powtórzył gon czasy. Na przykład,repeat ("hi", 3) daje wynik"hihihi".

Kilkakrotnie korzystałem z tej funkcji, ale ku mojemu przerażeniu nigdy nie znalazłem czegoś podobnego w C ++. Tak, mogę z łatwością tworzyć własne lub ułatwić korzystanie z nich, ale jestem zaskoczony, że nie jest już uwzględniony.

Znajduje się w jednym miejscu, w którym zmieści się naprawdę dobrzestd::string:

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

Pozwoliłoby to na składnię, taką jak:

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

Samo to nie jest jeszcze zbyt wielkie, ale mogłoby być lepiej, co prowadzi mnie do mojej drugiej części: literałów.

Za każdym razem, gdy używamy operatorów łańcuchowych, takich jakoperator+, musimy się upewnić, że jeden argument jest w rzeczywistości łańcuchem. Dlaczego po prostu nie zdefiniowali dosłownie tego słowa""s? Dosłowne przyrostki, które nie zaczynają się od podkreślenia, są zarezerwowane dla implementacji, więc nie powinno to powodować konfliktu, ponieważ może to zostać dodane, zanim ktokolwiek zacznie tworzyć własne.

Wracając do przykładu powtarzania, składnia byłaby po prostu:

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

Spowodowałoby to:

123123123456

W tym czasie można również uwzględnić jedno dla postaci, aby zaspokoićcout << '1's + '2's;

Dlaczego nie uwzględniono tych dwóch funkcji? Zdecydowanie mają jasne znaczenie i ułatwiają kodowanie, a jednocześnie korzystają ze standardowych bibliotek.