반응형
lvalues references and rvalues references in C++ with Examples - GeeksforGeeks
l-value and r-value
l=value는 객체를 가리키는 메모리 위치를 나타내고, r-value는 메모리 위치에 할당된 값을 나타냅니다. 여기서 참조 (reference)는 이미 존재하는 변수에 다른 이름을 할당하는 것외에 다른 기능은 없습니다.
int a = 10;
int& lref = a; // 좌측 값 참조
int&& rref = 10; // 우측 값 참조
아래 코드는 좌측 값 참조와 참조된 변수의 주소를 비교하는 코드입니다. 마치 포인터처럼 같은 메모리 주소를 갖는 것을 알 수 있습니다.
#include <iostream>
using namespace std;
// Driver Code
int main()
{
// Declaring the variable
int a{ 10 };
// Declaring reference to
// already created variable
int& b = a;
// Provision made to display
// the boolean ouptut in the
// form of True and False
// instead of 1 and
cout << boolalpha;
// Comparing the address of both the
// varible and its reference and it
// will turn out to be same
cout << (&a == &b) << endl;
return 0;
}
r-value reference
- 임시 객체 (r-value)를 참조로 받으면 임시 객체의 수명을 늘릴 수 있습니다
: 이 특징을 이용해 이동 생성자를 정의할 때 r-value reference가 사용됩니다. - r-value reference는 l-value이므로 const가 아니라면 l-value를 대입 연산 (=)할 수 있다.
#include <iostream>
using namespace std;
int main() {
int a = 10;
int& lref = a; // l-value reference
int&& rref = 20; // r-value reference
lref = 30; // l-value reference 값을 변경할 수 있음
rref = 40; // r-value reference 값을 변셩할 수 있음
int &&ref = a; // error;
}
#include <iostream>
using namespace std;
void foo(int& a) {
cout << "lvalue reference" << endl;
}
void foo(int&& a) {
cout << "rvalue reference" << endl;
}
int main() {
int a = 10;
int& lref = a;
int&& rref = 10;
cout << lref << endl;
cout << rref << endl;
foo(a);// lvalue reference
foo(10); // rvalue reference
foo(lref); // lvalue reference
foo(rref); // lvalue reference
}
반응형
'💻 programming > c++' 카테고리의 다른 글
[c++] thread vs task (thread 와 async) (0) | 2021.08.04 |
---|---|
[c++] thread (0) | 2021.08.04 |
[c++] condition variable (조건 변수) (0) | 2020.12.17 |
[c++] std::shared_mutex (0) | 2020.12.16 |
[c++] std::timed_mutex (0) | 2020.12.16 |
댓글