'+'无法添加两个指针错误

时间:2015-05-18 15:10:07

标签: c++

我可以执行以下代码显示的内容:

std::string a = "chicken ";
std::string b = "nuggets";
std::string c = a + b;

然而,这失败了:

std::string c = "chicken " + "nuggets";

它给我一个错误,说“'+'不能添加两个指针”。为什么会这样?是否有其他方法可以在不出错的情况下执行此操作?

3 个答案:

答案 0 :(得分:13)

"chicken ""nuggets"是文字C字符串,而不是std::string

您可以直接连接:

std::string c = "chicken " "nuggets";

从C ++ 14开始,您可以添加后缀s以包含字符串

using namespace std::string_literals;
std::string c = "chicken "s + "nuggets"s;

答案 1 :(得分:6)

"chicken ""nuggets"不是std::string类型,而是const char[]。因此,即使您要将串联分配给字符串,它们也不会有运算符+。您可以使用以下方法解决此问题:

std::string c = std::string("chicken ") + "nuggets";

答案 2 :(得分:4)

"chicken""nuggets"都有const char*类型(代码中的文字)。所以你试图添加指针。

尝试 std::string c = std::string("chicken") + "nuggets";

std :: string不是语言本身的一部分,它是标准库的一部分。 C ++旨在尽可能少地使用语言功能。所以字符串的内置类型在解析器等中不存在。这就是为什么字符串文字将作为指针处理。

修改

完全正确:文字的类型实际上是const char[N](其中N是\0的文字+1中的字符数。但是在C ++数组([])中可以视为指针,这就是编译器尝试做的事情(因为它不能添加数组)