我知道两个std::string
的{{1}}的{{3}}没有超载。因此,
const char*
不起作用;然而,以下代码完美无缺。
std::string str = "Hello" + " World";
此外,静态字符串连接(没有+运算符)也可以正常工作
std::string hello = "Hello";
std::string str = hello + " World";
两个std::string str = "Hello" " World";
没有operator +的技术原因是什么?
答案 0 :(得分:6)
没有这样的运营商的技术原因集中在所有权(拥有此运营商?const char*
,全局命名空间或其他东西),添加两个"Hello" + " World"
指针的事实毫无意义,其他问题围绕只读NUL终止字符文字的属性。
+
对将要分配的内容一无所知。使用const char[]
要求const char*
字面值衰减到+
指针。添加两个指针完全没有意义,因此现代编译器将发出一个诊断,指出const char[]
类型没有定义"Hello" " World"
。
hello + " World"
是C-idiomatic字符串文字串联语法。自20世纪70年代以来一直存在,并且当每行代码只能看到80个左右的字符时,帮助民间写长字符串。
+
正在使用std::string
上的重载 hello
运算符。这是因为std::string
是std::string str = "Hello"s + " World";
。
从C ++ 14开始,你可以利用
利用用户定义的文字std::string str = ""s + "Hello" + " World";
甚至
s
请注意后缀$('div.article.article_rubric_top,div.article.article_top.article_right').find('a:first')
。
答案 1 :(得分:1)
没有操作符+两个const char *的技术原因是什么?
在C ++中,只为指针定义了某些类型的操作 - 从/向指针添加/减少intergal值,从另一个指针中减去指针。没有定义添加指针指针,因为它没有任何意义。在这种意义上,字符指针与其他字符没有什么不同,并且没有可行的解决方案来为const char*
提供这样的例外,因为它在一般情况下不起作用。它只能用于字符串文字,但可以用语言连接它们。
这是来自语言。如果你问为什么库编写者没有提供这样的重载 - 你不能覆盖内置类型的操作符,只能用于用户定义的操作符。字符串文字和php artisan down
都不是用户定义的。
答案 2 :(得分:0)
我知道stad :: string的operator +没有为两个const char *重载。
这种期望就像你为+
类写Obj
作为参数obj1
和obj2
。然后说1+5
不会使您的运营商过载。当然这里没有涉及Obj
课程。
部分
std::string str = hello + " World";
有效,因为运算符涉及来自here的std::string
重载4。
最后,"Hello" " World"
没有任何结论。这就像在一个单独的部分写一个字符串。这有助于你用两行写一个长句。