HOWTO · C++
C++의 이중 앰퍼샌드
이 자습서에서는 C++에서 이중 앰퍼샌드가 의미하는 것을 소개합니다.
이 페이지의 내용
이 가이드에서는 C++의 이중 앰퍼샌드 기호에 대해 설명합니다. 실제로 C++11의 개념에 있습니다.
변수를 선언할 때 이중 앰퍼샌드(&&)를 본 적이 있을 것입니다. 이 개념의 모든 측면을 이해하려면 C++의 몇 가지 기본 사항을 이해해야 합니다.
C++의 이중 앰퍼샌드
이중 앰퍼샌드(&&)를 이해하려면 C++에서 lvalues와 rvalues를 알아야 합니다. 다음 하위 섹션에서 이러한 용어를 이해합시다.
C++의 lvalue
lvalue는 주 메모리 또는 RAM에서 식별 가능한 공간을 차지할 수 있는 개체 또는 변수로 간주됩니다. 예를 들어 다음 코드를 살펴보십시오.
int number = 10;
number는 위의 코드에서 lvalue로 간주됩니다. 포인터를 만들어 위치/주소를 얻습니다.
// this is pointer to varible
int *ptr_Number = &number;
// here we'll get the address of variable in memory;
cout << ptr_Number << endl;
// object example
C++의 rvalue
rvalue는 메모리에 식별 가능한 공간이 없는 개체 또는 변수입니다. 또한 일시적인 가치로 간주됩니다.
다음 코드를 살펴보십시오.
int number = 10;
위 코드에서 ‘숫자’는 ’lvalue’이지만 ‘10’은 ‘rvalue’입니다. 숫자 ‘10’ 주소를 얻으려고 하면 오류가 발생합니다.
// int *ptr_10 = &10;
//(error) expression must be an lvalue
C++11에서 이중 앰퍼샌드 기호는 rvalue를 나타냅니다. 이제 두 가지 방법을 살펴보겠습니다.
하나는 단일 앰퍼샌드 기호이고 다른 하나는 이중 앰퍼샌드 기호입니다.
lvalue를 함수에 전달하려고 하면 오류가 발생합니다. 따라서 기본적으로 이중 앰퍼샌드의 주요 목적은 rvalues를 참조하는 것입니다.
// single ampersand sign is used to refer lvalue
int add(int &a, int &b) { return a + b; }
// double ampersand sign is used to refer rvalue
int add_(int &&a, int &&b) { return a + b; }
int main() {
// here we pass lvalue to the function
int num1 = 10;
int num2 = 30;
int sum = add(num1, num2);
cout << sum << endl;
// it will give the error if we pass the rvalues to that function
// int sum_1= add(10,30);
//(error) initial value of reference to non-const must be an lvalue
// c++11 provides the facility of passing rvalues by using double ampersand
// sign
int sum_1 = add_(10, 30);
cout << endl;
}