String & String::operator+= (const String & x) { if (x.m_string == NULL) return *this; char * pOld = m_string; m_string = new char[m_size+x.m_size+1]; strcpy (m_string, pOld); strcat (m_string, x.m_string); delete [] pOld; return *this; }
String String::operator+(const String &str) //重载字符串连接(+)运算符
{
String NewString ;
int size = strlen(m_data)+strlen(str.m_data);
NewString.m_data = new char[size+1];
strcpy(NewString.m_data,m_data);
strcat(NewString.m_data,str.m_data);
return NewString;
}
+运算符构造了一个临时NewString (调用构造函数),返回时会拷贝临时NewString(调用拷贝函数),
+=运算符只需为当前string分配一块内存,返回引用,没有拷贝(无需),
可以发现+=效率更高。