我们可以添加两个字符串类对象,让我们说C++中的字符串类对象+运算符和追加函数之间的区别?
string str1="hello"
string str2="world"
string final =str1+str2;
或
string f=str1.append(str2);
的是这两种方法之间的区别? 他们添加或实现的顺序或其他?
我们可以添加两个字符串类对象,让我们说C++中的字符串类对象+运算符和追加函数之间的区别?
string str1="hello"
string str2="world"
string final =str1+str2;
或
string f=str1.append(str2);
的是这两种方法之间的区别? 他们添加或实现的顺序或其他?
operator +会将两个字符串加在一起,并用该值生成一个新字符串。作为追加将采取一个字符串并连接到您的字符串的结尾。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "Writing";
string str2= " a book";
str.append(str2);
cout << str << endl; // "Writing a book"
return 0;
}
此外,追加有更多的功能,如仅生成的字符串追加
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
string str2="Writing ";
string str3="print 10 and then 5 more";
// used in the same order as described above:
str.append(str2); // "Writing "
str.append(str3,6,3); // "10 "
str.append("dots are cool",5); // "dots "
str.append("here: "); // "here: "
str.append(10,'.'); // ".........."
str.append(str3.begin()+8,str3.end()); // " and then 5 more"
str.append<int>(5,0x2E); // "....."
cout << str << endl;
return 0;
}
更多append这里的一部分。
那么,明显str1
有两个操作之间的不同值(在第一个,它保持与以前相同,在第二个它具有相同的值f
)。
另一个区别是str1 + str2
创建一个临时字符串(连接的结果),然后应用operator=
。 str1.append()
调用不会创建临时变量。
其中之一,operator+
创建一个新的字符串,而append
修改以前存在的一个。所以,在你的例子中,第二个将修改str1
,第一个不会。 append
方法比+
更接近+=
。
在+运算符的情况下,它将首先获取一个临时空间,然后复制其中的第一个字符串,然后复制第二个字符串,如appeth() 它直接连接第一个字符串后面的第二个字符串,在性能方面更好。复制操作较少
您是否尝试过这些代码段,并在两种情况下比较了'str1'和'str2'的内容? – mfontanini 2012-08-11 20:44:03
此外,'operator +'会被隐式调用,因此可以说当你有T类型的模板和解析参数时,你可以简单地使用'+'-operator并且不需要为具体数据类型专门化该模板。肯定还有其他一些隐含的调用可能有用的机会。虽然你应该知道,隐式调用总是意味着更少的控制... – xQuare 2012-08-11 20:57:28