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

jlc*_*lin 5 c++ string operators c++11

为什么operator+=定义std::stringoperator+未定义?请参阅下面的我的MWE(http://ideone.com/OWQsJk).

#include <iostream>
#include <string>
using namespace std;

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

    string second;
    //second = "abc" + "def";       // This won't compile
    cout << "\nsecond = " << second << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rey 9

您需要将其中一个原始字符串文字转换为std::string显式.你可以像其他已经提到过的那样做:

second = std::string("abc") + "def";
Run Code Online (Sandbox Code Playgroud)

或者使用C++ 14,您将能够使用

using namespace std::literals;
second = "abc"s + "def";
// note       ^
Run Code Online (Sandbox Code Playgroud)


edu*_*ffy 6

那些不是std::strings,它们是const char *.试试这个:

 second = std::string("abc") + "def";
Run Code Online (Sandbox Code Playgroud)

  • @ 0x499602D2从您的链接:"字符串文字的类型被更改为...变为const char数组." "如果`e`是左值,`decltype(e)`是`T&`,其中`T`是`e`的类型;" 很明显,`e`的类型是'T`而不是参考.`decltype("literal")`是一个引用,但``literal``只是一个左值. (3认同)
  • 从技术上讲,它们不是`const char*`,它们是`const char [4]`. (2认同)