C++ 为什么';字符串定义乘法还是文字?

C++ 为什么';字符串定义乘法还是文字?,c++,string,c++11,multiplication,user-defined-literals,C++,String,C++11,Multiplication,User Defined Literals,在我第一次接触的语言中,有一个函数repeat(),它接受一个字符串,并将其重复n次。例如,repeat(“hi”,3)给出了“hihi”的结果 我曾经多次使用过这个函数,但令我沮丧的是,我从来没有在C++中找到类似的东西。是的,我可以很容易地做我自己的,或使它更容易使用,但我有点惊讶,它还没有包括在内 它非常适合的一个地方是std::string: std::string operator* (const std::string &text, int repeatCount); std

在我第一次接触的语言中,有一个函数
repeat()
,它接受一个字符串,并将其重复
n次。例如,
repeat(“hi”,3)
给出了
“hihi”
的结果

我曾经多次使用过这个函数,但令我沮丧的是,我从来没有在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 << "\"."
这将产生:

123123123456

不过,为了满足
cout的要求,也可以包含一个字符,至于乘法,这并不符合C++的理念:像Ruby这样的语言包含“电池”和“最小惊喜原则”。他们的目的是要有很多这样的小细节,作为一个高于和超越最低的功能。C++是一种系统级语言,它的目的是“更接近于金属”,这是非常清楚的,即<<代码>字符串 >甚至不是语言的核心数据类型,而是一个提供了ADDO的库。即使FORTRAN有一个本机字符串类型,所以您也可以看到低级C++是如何定位的。这是有意为之的:如果您正在编程一个具有1K存储空间的嵌入式芯片,而不使用字符串,该怎么办?只是不包括他们

无论如何,乘法运算符应该做什么还不是100%清楚。换句话说,在C++的核心语言和库中,除非几乎每个人都同意所提出的功能,否则没有任何特性进入。它必须是真正普遍的

我个人可能认为“123”*3可以给出“369”——用任何数字乘以3。我进一步建议,这种解释是“合理的”,足以防止重复运算符解释成为唯一明确的解释


文字符号更容易回答,也更清晰:
std::string
是标准库的一部分,它是语言语法本身之上的一个抽象级别。换句话说,文字符号将突破“语言特性”和“您可以期望与编译器捆绑在一起的库”之间的抽象层次。

好吧,至于乘法,它实际上并不在C++的哲学中:像Ruby这样的语言“包括电池”和“最小惊奇原则”。他们的意图是有很多这些细微的细微之处,如上面和超出最小的特征。C++是一种系统级语言,旨在“更接近金属。”“,这一点非常清楚,因为
字符串
甚至不是该语言的核心数据类型,而是库提供的插件。即使FORTRAN有一个本机字符串类型,所以您也可以看到低级C++是如何定位的。这是有意为之的:如果您正在编程一个具有1K存储空间的嵌入式芯片,而不使用字符串,该怎么办?只是不包括他们

无论如何,乘法运算符应该做什么还不是100%清楚。换句话说,在C++的核心语言和库中,除非几乎每个人都同意所提出的功能,否则没有任何特性进入。它必须是真正普遍的

我个人可能认为“123”*3可以给出“369”——用任何数字乘以3。我进一步建议,这种解释是“合理的”,足以防止重复运算符解释成为唯一明确的解释


文字符号更容易回答,也更清晰:
std::string
是标准库的一部分,它是语言语法本身之上的一个抽象级别。换句话说,文字符号将突破“语言特性”和“您可以期望与编译器捆绑在一起的库”之间的抽象层次;那里是的。现在,这适用于字符文本,而对于使用字符串执行此操作,则无法以声明方式执行此操作。还要注意的是,STD::String类不是语言类型,C++中的字符串是const char *。指针。哪些数组会衰减为指针,这就是std::string类如何处理它所包含的内容,即字符数组(即char)或std::wstring的wchar\t。这些类型上没有模板。

std::string.append(numtimes,char-to-repeat);那里是的。现在,这适用于字符文本,而对于使用字符串执行此操作,则无法以声明方式执行此操作。还要注意的是,STD::String类不是语言类型,C++中的字符串是const char *。指针。哪些数组会衰减为指针,这就是std::string类如何处理它所包含的内容,即字符数组(即char)或std::wstring的wchar\t。在这些类型上有模板。

记住C++不是Perl……可能不是,我引用的也不是,但是它们一直在C++中变得更友好。只要看看
auto
。他们从来没有想到过这些吗?@fontanini,除了
s
是一个保留的后缀外,如果每次我想使用它时它已经在那里,我会觉得它方便得多。
typedef std::string s;我真的不能理解一个现实的用例,它还没有涵盖。真正地在真实代码中,保持我的C++不是Perl……可能不是,我引用的也不是,但是他们一直在使C++更友好。只要看看
auto
。他们从来没有想到过这些吗?@fontanini,除了
s
是一个保留的后缀外,如果每次我想使用它时它已经在那里,我会觉得它方便得多。
typedef std::string s;我真的不能理解一个现实的用例,它还没有涵盖。真正地在真实代码中?我只是好奇,操作符还会做什么?特别是,一个synta
123123123456