다음을 통해 공유


참조 초기화

참조 형식의 변수는 참조 형식이 파생된 형식의 개체 또는 참조 형식이 파생된 형식으로 변환될 수 있는 형식의 개체를 사용하여 초기화되어야 합니다. 예를 들면 다음과 같습니다.

// initializing_references.cpp
int iVar;
long lVar;
int main() {
   long& LongRef1 = lVar;   // No conversion required.
   long& LongRef2 = iVar;   // C2440
   const long& LongRef3 = iVar;   // OK
   LongRef1 = 23L;   // Change lVar through a reference.
   LongRef2 = 11L;   // Change iVar through a reference.
   LongRef3 = 11L;   // C3892
}

임시 개체를 사용하여 참조를 초기화하는 유일한 방법은 상수 임시 개체를 초기화하는 것입니다. 참조 형식 변수는 초기화되면 항상 동일한 개체를 가리키며, 다른 개체를 가리키도록 수정될 수 없습니다.

구문은 동일할 수 있지만 참조 형식 변수의 초기화와 참조 형식 변수에 대한 할당은 의미 체계가 서로 다릅니다. 위의 예제에서 iVar 및 lVar을 변경하는 할당은 초기화와 유사해 보이지만 결과가 다릅니다. 초기화는 참조 형식 변수가 가리키는 개체를 지정하고, 할당은 참조를 통해 참조된 개체에 할당합니다.

참조 형식의 인수를 함수에 전달하는 것과 함수에서 참조 형식의 값을 반환하는 것은 둘 다 초기화이기 때문에 함수에 대한 형식 인수는 참조가 반환됨에 따라 올바르게 초기화됩니다.

참조 형식 변수는 다음에서만 이니셜라이저 없이 선언될 수 있습니다.

  • 함수 선언(프로토타입). 예를 들면 다음과 같습니다.

    int func( int& );
    
  • 함수 반환 형식 선언. 예를 들면 다음과 같습니다.

    int& func( int& );
    
  • 참조 형식 클래스 멤버의 선언. 예를 들면 다음과 같습니다.

    class c {
    public:
       int& i;
    };
    
  • extern으로 명시적으로 지정된 변수의 선언. 예를 들면 다음과 같습니다.

    extern int& iVal;
    

참조 형식 변수를 초기화할 때 컴파일러는 다음 그림과 같은 결정 그래프를 사용하여 개체에 대한 참조 만들기 또는 참조가 가리키는 임시 개체 만들기 중에서 선택합니다.

참조 형식 초기화를 위한 결정 그래프

판단 그래프 초기화 참조 형식

volatile 형식에 대한 참조(volatile typename**&** identifier로 선언됨)는 동일한 형식의 volatile 개체 또는 volatile로 선언되지 않은 개체를 사용하여 초기화될 수 있습니다. 그러나 해당 형식의 const 개체를 사용하여 초기화될 수는 없습니다. 이와 마찬가지로 const 형식에 대한 참조(const typename**&** identifier로 선언됨)는 동일한 형식의 const 개체(또는 해당 형식으로 변환되는 임의의 개체나 const로 선언되지 않은 개체)를 사용하여 초기화될 수 있습니다. 그러나 해당 형식의 volatile 개체를 사용하여 초기화될 수는 없습니다.

const 또는 volatile 키워드를 사용하여 한정되지 않은 참조는 const 또는 volatile로 선언되지 않은 개체를 사용해서만 초기화될 수 있습니다.

참고 항목

참조

이니셜라이저