C ++:为什么’operator + =’定义但不是’operator +’用于字符串?

C++: Why is 'operator+=' defined but not 'operator+' for strings?

本问题已经有最佳答案,请猛点这里访问。

为什么operator+=是为std::string定义的,但operator+没有定义?请参阅下面的我的MWE(http://ideone.com/owqsjk)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
using namespace std;

int main() {  
    string first;
    first ="Day";
    first +="number";
    cout <<"
first ="
<< first << endl;

    string second;
    //second ="abc" +"def";       // This won't compile
    cout <<"
second ="
<< second << endl;
    return 0;
}


您需要将一个原始字符串文本显式转换为std::string。你可以像前面提到的那样做:

1
second = std::string("abc") +"def";

或者用C++ 14,你就可以使用

1
2
3
using namespace std::literals;
second ="abc"s +"def";
// note       ^

那些不是std::string,他们是const char *。试试这个:

1
 second = std::string("abc") +"def";


C++: Why is 'operator+=' defined but not 'operator+' for strings?

它是。它要求至少有一个操作数是std::string

1
2
3
4
5
6
7
int main()
{
  std::string foo("foo");
  std::string bar("bar");
  std::string foobar = foo + bar;
  std::cout << foobar << std::endl;
}

在您的案例中,问题是您试图添加字符串文本"abc""def"。它们有const char[4]型。这些类型没有operator+


只有当至少一个操作数的类型为std::string时,+才能连接两个字符串。

"abc" +"def"中,操作数都不是std::string类型。