我只是对c ++ string + =。
的实现感到好奇对此有任何性能损失吗? 哪一个应该更快?
String a = "xxx";
a += "(" + "abcd" + ")"
或
String a = "xxx";
a.append("(");
a.append("abcd");
a.append(")");
答案 0 :(得分:2)
鉴于它们在标准中具有逐字逐句的相同规范,很难设想一个合理的实现,其运行时成本会有所不同:
21.4.6 basic_string modifiers [string.modifiers]
21.4.6.1 basic_string::operator+= [string::op+=]
basic_string& operator+=(const basic_string& str);
1 E ff ects:致电
append(str.data, str.size()).
2返回:
*this
...
21.4.6.2 basic_string::append [string::append]
basic_string& append(const basic_string& str);
1 E ff ects:致电
append(str.data(), str.size()).
2返回:
*this.
答案 1 :(得分:0)
如果通过调用+=
未实现append
运算符,我会感到非常惊讶。
事实上,basic_string
的{{3}}表示:
basic_string& operator+=(const basic_string& s)
相当于append(s)
。
此外,SGI's documentation读取:
basic_string& operator+=(const basic_string& __s) { return append(__s); }
答案 2 :(得分:0)
它们之间没有区别,实际上+ =运算符的实现只是调用append。 我从STL代码中读到它。