* 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;
}
'IT공부' 카테고리의 다른 글
[C++] 참조값 리턴 (0) | 2025.03.22 |
---|---|
[운영체제] 시스템 콜(System Call) (0) | 2025.02.27 |
[C] C언어 전역변수, static 변수 vs Java static 변수 (0) | 2025.02.11 |
[C] 문자열 함수 (0) | 2025.02.01 |
[ETC] 메모리 원자성과 DB 원자성 (0) | 2025.01.24 |