2012-08-11 1 views
4

우리의이C++의 문자열 클래스 객체에 대해 + 연산자와 추가 함수의 차이점은 무엇입니까?

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

string final =str1+str2; 

또는

string f=str1.append(str2); 

이러한 두 가지 방법의 차이점은 무엇입니까 말을하자 두 개의 문자열 클래스 객체를 추가 할 수 있습니다? 그들이 추가하거나 구현하거나 다른 것을 수행하는 순서 ??

+7

두 조각에서 해당 조각을 시도하고 'str1'과 'str2'의 내용을 비교 했습니까? – mfontanini

+0

또한'operator +'가 암시 적으로 호출되므로, 템플릿이 있고 T 타입의 구문 분석 인수가 있으면'+'연산자를 사용하고 구체적인 데이터 유형을 위해 해당 템플릿을 전문화 할 필요가 없다고 말할 수 있습니다. 암시 적 호출이 유용 할 수있는 다른 기회가 분명히 있습니다. 암시 적 호출이 항상 제어력이 떨어질 수 있다는 것을 알고 있어야하지만 ... – xQuare

답변

6

연산자 +는 두 개의 문자열을 함께 추가하고 값이있는 새 문자열을 생성합니다. where로는 append가 문자열을 취하여 문자열 끝에 연결합니다. 여기 만 append에 대한 자세한 해당 문자열

#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; 
} 

의 일부를 추가처럼 또한

#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; 
} 

는, 추가 더 많은 기능을 가지고 있습니다.

2

음, 분명히 str1은 두 연산 사이에 다른 값을가집니다. (첫 번째에서는 이전과 동일하게 유지되고 두 번째에서는 f과 같은 값을가집니다).

또 다른 차이점은 str1 + str2은 임시 문자열 (연결 결과)을 만들고 operator=을 적용한다는 것입니다. str1.append() 호출은 임시 변수를 작성하지 않습니다.

2

operator+은 새 문자열을 만들고 반면에 append은 기존 문자열을 수정합니다. 따라서 예에서 두 번째 것은 str1을 수정하고 첫 번째 것은 수정하지 않습니다. append 메서드는 보다 +=에 더 가깝습니다.

0

+ 연산자의 경우 먼저 임시 공간을 가져 와서 첫 번째 문자열을 복사 한 다음 두 번째 문자열을 복사 한 후 append()에서 첫 번째 문자열 다음에 두 번째 문자열을 직접 연결하므로 추가합니다 성능 측면에서 더 우수합니다. 복사 작업이 적음

관련 문제