IT공부

[C++] const T&(읽기 전용 참조), T&&(우변 참조, 이동 가능)

shine94 2025. 3. 22. 12:08

* const T&(읽기 전용 참조)

   - lvalue, rvalue 모두 받을 수 있음

   - 복사 없이 임시값도 참조 가능

   - 수정 불가

   [사용 목적] 값을 읽기만 할 때, 복사 비용을 줄이면서 원본을 변경하지 않기 위해

 

* T&&(우변 참조, 이동 가능)

   - rvalue만 받을 수 있음

   - 복사 대신 이동(Move) 가능

   - 수정 가능

   - 임시값을 효율적으로 쓰고 싶을 때 사용

   [사용 목적] 자원 소유권을 받아서 수정하거나 이동(move), 복사를 피하고 성능 최적

 

* string&, string&&, const string& 차이

함수 선언 받을 수 있는 값 수정 시 원본 영향
void f(string& s) lvalue (string a) 바뀜
void f(string&& s) rvalue ("hi", move(a)) 상황에 따라
void f(const string& s) 둘 다 가능 못 바꿈

 

#include <iostream>
using namespace std;

string Modify1(string&& s) 
{
    s += " modified1";
    return s;
}

string Modify2(string& s) 
{
    s += " modified2";
    return s;
}

int main(void)
{
    string str = "TEST str var";

    //cout << Modify1(str) << endl;     // 불가
    cout << Modify1("nice") << endl;
    cout << Modify1(move(str)) << endl << endl;

    str = "TEST str var";
    cout << Modify2(str) << endl;
    //cout << Modify2("nice") << endl;      // 불가
    //cout << Modify2(move(str)) << endl;   // 불가 

    cout << endl << "======================" << endl;
    cout << "Main: " << str << endl;
    
    return 0;
}