首页 > 解决方案 > 字符串运算符 +(重载)char 数组和 string.in cpp 的不同行为

问题描述

我尝试使用字符串运算符合并 2 个数组。以下案例工作正常,+ 运算符接受 char* 和字符串。

    string s = "";;
    char a[5] = { 'f', 'i', 'r', 's', 't' };
    char b[6] = { 's', 'e', 'c', 'o', 'n', 'd' };
    s = a + string(b);

但是当我传递 char* 和 string 时,这种情况不能正常工作。我很困惑为什么会这样?

    string s = "";;
    char a[5] = { 'f', 'i', 'r', 's', 't' };
    char b[6] = { 's', 'e', 'c', 'o', 'n', 'd' };
    s = a + "{";

有人可以解释一下吗?

标签: c++arraysstringcharoperator-overloading

解决方案


因为"{"is not std::string, but const char[2](包括空终止符字符)可能衰减到const char*. 然后a + "{"只是无效的指针算术(加法)。

您需要将任一操作数更改为std::string以使operator+forstd::string被调用。例如

a + std::string("{");

或使用文字(C++14 起)。

a + "{"s;

推荐阅读