【问题标题】:'+' cannot add two pointers error'+' 不能添加两个指针错误
【发布时间】:2016-01-28 20:32:15
【问题描述】:

我可以执行以下代码所示的操作:

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

但是,这失败了:

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

它给了我一个错误说“'+'不能添加两个指针”。为什么呢?有没有其他方法可以做到这一点而不会出错?

【问题讨论】:

  • 如果您告诉我们string 是什么会有所帮助。
  • include <string>了吗?
  • 我以为我已经正确解释了这个问题,抱歉。不,我不需要包含 .
  • @VicenteBermúdez 如果您使用的是std::string,那么您确实需要#include <string>。如果没有它,如果其他头文件引入了一些必需的定义,代码可能会部分工作,但这并不意味着您不需要包含它。如果您不这样做,预计稍后会出现奇怪的错误。
  • for std::strings 加法运算符被重载以连接两个输入字符串。然而“chicken”和“nuggets”是C-strings。编译器不会连接它们。

标签: c++


【解决方案1】:

"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;

【讨论】:

  • 为了谷歌,这是“加速 C++”(Koenig,2000)中练习 1-2 的答案。
【解决方案2】:

"chicken ""nuggets" 不是std::string 类型,而是const char[]。因此,即使您想将连接分配给他们键入的字符串,也没有运算符+。您可以使用以下方法解决此问题:

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

【讨论】:

    【解决方案3】:

    "chicken""nuggets" 都具有 const char* 类型(作为代码中的文字)。所以你正在尝试添加指针。

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

    std::string 不是语言本身的一部分,它是标准库的一部分。 C++ 旨在具有尽可能少的语言特性。因此,解析器等中不存在字符串的内置类型。这就是字符串文字将被视为指针的原因。

    编辑

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

    【讨论】:

    • 注意类型实际上是const char[9]const char[8]
    • 是的,我想简化答案(没有解释 C++ 中的 [] 是隐式指针:))
    • 查看this了解原因
    猜你喜欢
    • 1970-01-01
    • 2015-12-14
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多