c ++字符串append和operator + =之间的区别

Cly*_*ost 7 c++ string string-concatenation

两条线之间有明显的区别吗?我的同事说使用+ =是"更快"但我不明白他们为什么应该有所不同:

string s1 = "hello";
string s2 = " world";

// Option 1
s1 += s2;

// Option 2
s1.append(s2);
Run Code Online (Sandbox Code Playgroud)

为了澄清,我不是在问两个函数之间的用法差异 - 我知道它append()可以用于更广泛的用途,而且operator +=更专业.我关心的是如何处理这个特定的例子.

Ste*_*ner 10

根据有关string :: op + =/online c ++标准草案的标准,我不希望有任何区别:

basic_string&operator + =(const basic_string&str);

(1)效果:呼叫附加(str).

(2)返回:*this.


Pat*_*ckF 8

在 Microsoft STL 实现中,运算符+=是一个内联函数,它调用append(). 这里是实现,

  • 字符串(1): string& operator+= (const string& str)
basic_string& operator+=(const basic_string& _Right) {
    return append(_Right);
}
Run Code Online (Sandbox Code Playgroud)
  • c 字符串 (2): string& operator+= (const char* s)
basic_string& operator+=(_In_z_ const _Elem* const _Ptr) {
    return append(_Ptr);
}
Run Code Online (Sandbox Code Playgroud)
  • 字符(3): string& operator+= (char c)
basic_string& operator+=(_Elem _Ch) {
    push_back(_Ch);
    return *this;
}
Run Code Online (Sandbox Code Playgroud)