连接字符串不能按预期工作

And*_*dry 84 c++ string-concatenation standard-library stdstring operator-keyword

我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.

请考虑以下代码:

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)

编译器告诉我它找不到重载的运算符char[dim].

这是否意味着在字符串中没有+运算符?

但在几个例子中,存在类似这样的情况.如果这不是连接更多字符串的正确方法,那么最好的方法是什么?

Kon*_*lph 152

您编写的代码可以正常工作.你可能想要实现一些不相关的东西,但是相似:

std::string c = "hello" + "world";
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为对于C++,这似乎是你想要添加两个char指针.相反,您需要将至少一个char*文字转换为std::string.要么你可以做你已经在问题中发布的内容(正如我所说,这段代码可以使用),或者你执行以下操作:

std::string c = std::string("hello") + "world";
Run Code Online (Sandbox Code Playgroud)

  • @Andry:这不起作用的原因是C++从C继承了它的字符串文字,这就是为什么它们是`const char []`,而不是`std :: string`.在C(因此也在C++中)数组非常容易衰减到指针,这就是为什么"a"+"b"将调用添加两个指针的内置运算符.结果(一个指向内存的指针)当然是没用的,但不过这就是我们所坚持的. (12认同)
  • char*是一个指针,不能简单地添加,因为它需要分配内存.std :: strings隐藏分配,这就是为什么可以为它们提供运算符+的原因. (3认同)
  • @Andry:合理但错误。分配与此无关。@sbi给出的解释是正确的(除了指针添加的结果不是另一个指针的事实之外,根本不可能添加两个指针,因为结果将毫无意义)。 (2认同)

Svi*_*ack 46

std::string a = "Hello ";
a += "World";
Run Code Online (Sandbox Code Playgroud)

  • @Pratik [你确定吗?](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B%3D) (18认同)
  • 如果我有赞成票,那将是+1! (2认同)

gra*_*eds 5

我会这样做:

std::string a("Hello ");
std::string b("World");
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)

哪个在VS2008中编译.


Teo*_*oae 5

std::string a = "Hello ";
std::string b = "World ";
std::string c = a;
c.append(b);
Run Code Online (Sandbox Code Playgroud)