2012-05-12 2 views
1

참조 변수 (별칭 자체의 별칭)에 대한 참조를 만들면 괜찮습니까?별칭의 별칭?

그렇다면 응용 프로그램은 무엇입니까?

+0

아니요, C++에서는 불가능합니다. –

답변

2

참조에 대한 참조를 만들 수없고 C++에는 참조 참조 형식이 없습니다.

당신은 예를 들어, 다른 참조를 초기화하는 참조를 사용하는 경우 :

int i = 1; 
int &a = i; 
int &b = a; 

그런 다음 당신이 실제로했던하는 것은 ba을 referand 바인딩됩니다. ai이 같은 개체의 이름이므로 결과적으로 int &b = a;int &b = i;과 똑같은 효과를 나타냅니다. 따라서 동일한 객체에 대한 두 개의 참조 인 i이 있습니다.

동일한 기능에서 두 개의 참조가있는 이유를 즉시 생각할 수는 없지만 참조 매개 변수를 취하는 f 함수가있는 경우 일반적으로 여러 참조를 만들고 다른 함수 g 또한 참조 매개 변수를 사용합니다. 그런 다음 fg에는 각각 동일한 객체에 대한 참조가 있습니다.

4

C++ 98에서는 참조 형식에 대한 참조를 형식화하는 것이 불법입니다. C++ 11에는 새로운 참조가 붕괴되어 규칙이 있습니다. 즉, 참조에 대한 참조가 여전히 단순한 참조임을 의미합니다 (단, lvalue 및 rvalue 참조에 관한 미묘함이 있음). 이 코드를 고려 : C++ 98

typedef int & ir; 
int a; 
ir & b = a; 

이, 마지막 줄은 불법, ir & 유효한 유형 (참조에 대한 시도 참조)하지 않기 때문에. C++ 11에서는 참조가 붕괴되었고 ir &int &과 같습니다.

참조는 변경할 수 없으며 일단 초기화되면 대상 참조를 변경할 수 없음을 명심하십시오. 위의 코드에서 b은 항상 a의 별칭이되며 별칭으로 변경할 수 없습니다. 따라서 이중 간접 참조가 필요하지 않습니다. 일반적인 간접 참조로 이미 수행 할 수있는 것보다 더 많은 작업을 수행 할 수 없기 때문입니다.

완전성을 위해 참조 축소 규칙은 다음과 같습니다. T이 참조 유형이 아니라고 가정합니다. 그런 다음 개념적으로 다음과 같이 나타냅니다.

(T&)& == T& (T&)&& == T& (T&&)& == T& (T&&)&& == T&& 
+0

죄송 합니다만,이 질문자의 이야기가 아닌 것 같습니다. 그냥 확인 - 참조 붕괴 규칙은'ir &'철자'int &'의 다른 방법 일 뿐이라는 것을 의미합니까? 그래서 내 진술은 "참조에 대한 참조 유형이 없습니다"C++ 11에서 여전히 사실입니까? –

+0

@SteveJessop : 나는 OP가 무엇인지 모릅니다. 실제로 참조 유형에는 참조가 없습니다. 참조가 변경 불가능하기 때문에 원래의 참조로 수행 할 수없는 작업을 수행 할 수있는 아무 것도 없기 때문에 이러한 이중 간접 참조가 필요한 이유가 없습니다. –

+0

감사합니다. 다만 굴욕적인 교정을하지 않아도되는지 확인하고 싶습니다 .- –