2012-08-11 12 views
4

我们可以添加两个字符串类对象,让我们说C++中的字符串类对象+运算符和追加函数之间的区别?

string str1="hello" 
string str2="world" 

string final =str1+str2; 

string f=str1.append(str2); 

的是这两种方法之间的区别? 他们添加或实现的顺序或其他?

+7

您是否尝试过这些代码段,并在两种情况下比较了'str1'和'str2'的内容? – mfontanini 2012-08-11 20:44:03

+0

此外,'operator +'会被隐式调用,因此可以说当你有T类型的模板和解析参数时,你可以简单地使用'+'-operator并且不需要为具体数据类型专门化该模板。肯定还有其他一些隐含的调用可能有用的机会。虽然你应该知道,隐式调用总是意味着更少的控制... – xQuare 2012-08-11 20:57:28

回答

6

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这里的一部分。

2

那么,明显str1有两个操作之间的不同值(在第一个,它保持与以前相同,在第二个它具有相同的值f)。

另一个区别是str1 + str2创建一个临时字符串(连接的结果),然后应用operator=str1.append()调用不会创建临时变量。

2

其中之一,operator+创建一个新的字符串,而append修改以前存在的一个。所以,在你的例子中,第二个将修改str1,第一个不会。 append方法比+更接近+=

0

在+运算符的情况下,它将首先获取一个临时空间,然后复制其中的第一个字符串,然后复制第二个字符串,如appeth() 它直接连接第一个字符串后面的第二个字符串,在性能方面更好。复制操作较少

相关问题