참조 (C++)
참조는 포인터와 마찬가지로, 메모리의 다른 위치에 있는 개체의 주소를 저장합니다. 하지만 포인터와는 달리, 참조는 초기화되고 나면 다른 개체를 참조하도록 설정하거나 null로 설정할 수 없습니다. 두 가지 종류의 참조가 있습니다. lvalue 참조는 명명된 변수를 참조하고 임시 개체를 참조하는 rvalue 참조입니다. 연산자는 & lvalue 참조를 의미하고 && 연산자는 컨텍스트에 따라 rvalue 참조 또는 범용 참조(rvalue 또는 lvalue)를 나타냅니다.
참조를 선언할 수 있는 구문은 다음과 같습니다.
[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier] declarator [=expression];
참조를 지정하는 임의의 유효한 선언자를 사용할 수 있습니다. 참조가 함수 또는 배열 형식에 대한 참조가 아닌 한 다음 단순화된 구문이 적용됩니다.
[storage-class-specifiers] [cv-qualifiers] type-specifiers [& 또는 &&] [cv-qualifiers] 식별자 [=expression];
참조를 선언하는 시퀀스는 다음과 같습니다.
선언 지정자:
선택적 스토리지 클래스 지정자.
선택적
const
및/또는volatile
한정자입니다.형식 지정자: 형식의 이름
선언자:
선택적 Microsoft 전용 한정자. 자세한 내용은 Microsoft 관련 한정자를 참조하세요.
연산자 & 또는 && 연산자입니다.
선택적
const
및/또는volatile
qualifer.식별자입니다.
선택적 이니셜라이저입니다.
배열 및 함수에 대한 포인터에 대한 더 복잡한 선언자 양식도 배열 및 함수에 대한 참조에도 적용됩니다. 자세한 내용은 포인터를 참조하세요.
여러 선언자와 이니셜라이저가 단일 선언 지정자 뒤에 쉼표로 구분된 목록으로 나타날 수 있습니다. 예를 들면 다음과 같습니다.
int &i;
int &i, &j;
참조, 포인터 및 개체를 함께 선언할 수 있습니다.
int &ref, *ptr, k;
참조는 개체의 주소를 보유하지만 구문적으로 개체처럼 동작합니다.
다음 프로그램에서 개체 이름인 s
와 개체에 대한 참조인 SRef
를 프로그램에서 동일하게 사용할 수 있습니다.
예제
// references.cpp
#include <stdio.h>
struct S {
short i;
};
int main() {
S s; // Declare the object.
S& SRef = s; // Declare and initialize the reference.
s.i = 3;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
SRef.i = 4;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
}
3
3
4
4