【发布时间】:2012-05-22 09:44:04
【问题描述】:
在我第一次接触的语言中,有一个函数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;
为什么不包括这两个功能?它们肯定有明确的含义,并且使编码更容易,同时仍然使用标准库。
【问题讨论】:
-
请记住 c++ 不是 perl...
-
它可能不是,也不是我所引用的,但他们一直在使 C++ 更加用户友好。看看
auto。他们从来没有想过这些吗? -
@fontanini,除了
s是保留后缀之外,如果每次我想使用它时它已经在那里,我会看到它更方便。 -
typedef std::string s; cout << s("123") * 3; -
我真的无法理解constructor #2 尚未涵盖的实际用例。真的吗?在真实代码中?
标签: c++ string c++11 multiplication user-defined-literals