为什么 std::string 不定义乘法或文字?
Why doesn't std::string define multiplication or literals?
在我第一次被介绍的语言中,有一个函数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++的哲学:像Ruby这样的语言"包括电池"和"最小惊喜原则"。它们旨在将许多这些小细节作为超越最低限度的功能。C++是一种系统级语言,旨在"更接近金属",这一点非常清楚,因为string
甚至不是该语言的核心数据类型,而是库提供的插件。甚至 FORTRAN 也具有原生字符串类型,因此您可以看到低级C++的位置。这是有意为之的:如果您正在编写具有 1K 存储的嵌入式芯片并且不使用字符串怎么办?只是不要包括它们。
无论如何,并不是 100% 清楚乘法运算符应该做什么。换句话说,在C++的核心语言和库中,除非看起来几乎每个人都同意提议的功能,否则没有功能进入。它必须是真正普遍的。
我可能会认为"123"* 3可以给出"369" - 将任何数字乘以 3。我进一步提出,这种解释是"理智的",足以防止你的重复运算符解释成为唯一明确的解释。
文字符号更容易回答,也更清晰:std::string
是标准库的一部分,标准库是语言语法本身之上的一个抽象级别。换句话说,文字符号将突破分隔"语言功能"和"您可以期望与编译器捆绑在一起的库"的抽象级别。
std::string.append(numtimes, char to repeat(;那里。确实如此。现在,这适用于字符文字,至于使用字符串执行此操作,则无法以声明方式执行此操作。另外需要注意的是,std::string 类不是一种语言类型,c++ 中的字符串 illal 是 const char *。一个指针。哪些数组衰减为指针,这就是 std::string 类处理它所包含的内容的方式,即字符数组,即字符,或 std::wstring 的wchar_t。这些类型有模板。
- 如何将用户定义的文字放在C++相同类型的 constexpr 类中?
- 是否有解决方法可以在 c++ 中为 short 定义用户定义的文字?
- 用户定义文字的每个"normal"使用都是未定义的行为吗?
- 宏上的用户定义的文字运算符
- constexpr 用户定义的文字:允许吗?
- 用户定义的字符串文字为字符串null终止
- 来自 cpp首选项的用户定义的 const char* 文字示例
- 尝试编写进程内存并获取用户定义的文字运算符未找到
- 用户定义的数字文字可以立即加上点
- GCC是否支持宏定义中的多行原始字符串文字
- 用户定义的文字与UINT64_T参数相结合
- 用户定义的字符串文字与constrings相比
- 在接受用户定义的文字的排列时,防止过载爆炸
- 用户定义的文字定义
- 使用C++用户定义的文字来初始化数组
- C++11 - 无法使用 constexpr 函数定义 constexpr 文字?
- 是否可以为字符串文字创建模板的用户定义文字(文字后缀)
- 我是否应该为代码中的重复文字定义常量
- 使用auto声明变量,并使用原始文字定义的行为进行初始化
- 如何基于单个用户定义的文字自动添加文字定义