На языке, где меня впервые познакомили, появилась функция repeat()
, которая взяла строку и повторила ее n
раз. Например, repeat ("hi", 3)
дает результат "hihihi"
.Почему std :: string определяет умножение или литералы?
У меня было довольно много раз, что я использовал эту функцию, но, к моему ужасу, я никогда не нашел что-то похожее в 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;
Почему эти две функции не были включены? Они определенно имеют четкое значение и упрощают кодирование, все еще используют стандартные библиотеки.
Держу я в курсе, что C++ не perl ... –
Возможно, это не так, и я не упоминал об этом, но они постоянно делают C++ более удобным. Просто посмотрите на 'auto'. Они никогда не встречались с ними? – chris
@fontanini, кроме '' 'зарезервированного суффикса, я бы увидел его намного более удобным, если бы он был там каждый раз, когда я хотел его использовать. – chris