gpt4 book ai didi

c++ - 为什么在 C++ 中不允许连接两个 const char*?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:42 27 4
gpt4 key购买 nike

我尝试了以下方法,但不起作用。为什么?

std::string s = "hello" + "world"; 

为什么 C++ 标准库开发人员决定不重载 operator+ 来实现 char* 连接?这不会让人们的生活更简单吗?

最佳答案

对于两个文字字符串,您可以连接它们,但您不需要任何运算符,只需要(可选的)空格。所以

 std::string s="hello" "world"; 

允许并且与

相同
 std::string s="helloworld"; 

实际上,在解析时,两个文字字符串粘合在一起。这也适用于 C 并发生在预处理扩展之后。

这是 phase 6的编译过程。相邻string literals是连在一起的。

顺便说一句,这只适用于字符串文字。例如

std::string s1= ((1<2)?"hello":"goodbye") "world"; // wrong
std::string s2= ("ab")"cd"; // wrong

都错了。

您也可以使用 operator ""s

using std::literals::string_literals;
std::string s= "abcd"s + "ef"s;

但是 "abcd"s"ef"s 都表示一些常量 std::string-s 和 + 适用于这些。

Why c++ standard library developers decide not to reload"+" to implement a char* concatenation?

然后你会想要编码

 char* foo = (rand()%4)?"lucky":"unlucky";
char* bar = foo + "xy"; // wrong

如果这样的 + 被实现,它需要分配堆内存(在运行时)à la strdup 并且你需要决定谁以及什么时候分配是 delete[]free-d。顺便说一句,作为 r0ng answered您不能在指针类型上定义 operator +。因此,标准委员会不允许这样做的决定是明智的。

但是,如果您将上面的 char* 替换为 std::string 两次,它就可以工作。

关于c++ - 为什么在 C++ 中不允许连接两个 const char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45025362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com