반응형
1. 값, 포인터, 참조 전달
- 어셈블리 코드로 변경하면 포인터, 참조는 동일 형태
- 가급적 포인터가 필요한 경우 제외하고 참조 이용
- const int& 형태로 사용가능하기 때문!
- 값으로 전달 시 크기가 커지면 불필요한 공간 사용
- 참조 전달 사용
2. L value, R value
std::string a = "abc";
std::string b = std::move(a);
- a 는 L value
- "abc" 는 R value
- 한 번 불려지고 다음에 사용 안함
- std::move(L value)
- L value를 R value로 변경해줌
- a가 가리키던 "abc"가 b로 이동하고 a는 빈값 저장됨
- 예시
// 값 전달 : 2번 복사
void storeByValue(string s){
string b = s;
}
// L value 전달 : 1번 복사
void storeByLRef(string& s){
string b = s;
}
// R value 전달 : 0번 복사
void storeByRRref(string &&s){
string b = std::move(s);
}
- 값에 의한 전달
- 2번 복사 일어남
- L value 전달
- 1번 복사 일어남
- R value 전달
- 복사 없음
3. 입력값 최적화
- 인자는 값에 의한 전달로 구현
- 내부에서 std::move로 작성
- 결과
- L value로 넘어오면 1 copy 수행
- R value로 넘어오면 0 copy 수행
4. RVO(Return Value Optimization)
- return by value로 적용
- RVO 작동하여 0 copy 발생
참고
반응형
'C++ > C++' 카테고리의 다른 글
[C++]병렬 프로그래밍 (0) | 2021.03.11 |
---|---|
[C++]스마트 포인터 (0) | 2021.03.09 |
[C++]빌드 프로세스 (0) | 2021.03.09 |
[C++]메모리 구조 (0) | 2021.03.09 |
[C++]연산자 오버로딩 (0) | 2021.03.09 |