我可以执行以下代码显示的内容:
std::string a = "chicken ";
std::string b = "nuggets";
std::string c = a + b;
然而,这失败了:
std::string c = "chicken " + "nuggets";
它给我一个错误,说“'+'不能添加两个指针”。为什么会这样?是否有其他方法可以在不出错的情况下执行此操作?
答案 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 ++数组([]
)中可以视为指针,这就是编译器尝试做的事情(因为它不能添加数组)