Почему std :: string не определяет умножение или литералы? [закрыто]
На языке, с которым я впервые познакомился, была функцияrepeat()
, который взял строку, и повторил ееn
раз. Например,repeat ("hi", 3)
дает результат"hihihi"
.
У меня было довольно много раз, когда я использовал эту функцию, но, к моему ужасу, я никогда не находил ничего подобного в C ++. Да, я могу легко сделать свой собственный или сделать его проще в использовании, но я несколько удивлен, что он уже не включен.
Одно место, в которое это действительно хорошо вписалось бы, - этоstd::string
:
std::string operator* (const std::string &text, int repeatCount);
std::string operator* (int repeatCount, const std::string &text);
Это позволило бы использовать такой синтаксис:
cout << "Repeating \"Hi\" three times gives us \"" << std::string("Hi") * 3 << "\"."
Теперь это само по себе еще не слишком здорово, но могло бы быть и лучше, что подводит меня к другой моей части: литералам.
Каждый раз, когда мы используем строковые операторы, такие какoperator+
, мы должны убедиться, что один аргумент на самом деле является строкой. Почему они просто не определили литерал для него, как""s
? Буквальные суффиксы, не начинающиеся с подчеркивания, зарезервированы для реализации, так что это не должно противоречить тому, как это можно было бы добавить до того, как кто-то действительно начнет создавать свои собственные.
Возвращаясь к повторному примеру, синтаксис будет просто:
cout << "123"s * 3 + "456"s;
Это даст:
123123123456
В то же время, один для персонажей может быть включен, чтобы удовлетворитьcout << '1's + '2's;
Почему эти две функции не были включены? Они определенно имеют четкое значение и облегчают кодирование, но при этом используют стандартные библиотеки.