В языке, с которым я впервые познакомился, была функция 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;
Почему не были включены эти две функции? Они определенно имеют ясное значение и упрощают кодирование, при этом используя стандартные библиотеки.
auto
. Неужели это никогда не приходило им в голову? - person chris   schedule 15.05.2012s
является зарезервированным суффиксом, мне было бы намного удобнее, если бы он уже был там каждый раз, когда я хотел его использовать. - person chris   schedule 15.05.2012"123"_s * 3
с ограничениями, но вам все равно придется определять их каждый раз, когда вы хотите их использовать, или включать заголовок, который это делает. - person chris   schedule 15.05.2012string(size_type n,const string &s, const Allocator a = Allocator())
иstring(size_type n,const char *s, const Allocator a = Allocator())
) - person bames53   schedule 15.05.2012std::string
... - person David Rodríguez - dribeas   schedule 15.05.2012