2017-11-26 15 views
2

저는 현재 C++ Primer를 읽었으며 연습 중 하나에서 2 가지 유형의 참조 초기화, 하나의 const 및 하나의 const를 표시하며 하나의 const에서는 참조 점이 0을 가리 킵니다. 참조가 가리킬 수 있다고 생각했습니다. 물건을!이 C++ 참조 초기화는 어떻게 사용됩니까?

int i = -1, &r = 0;   // illegal, r must refer to an object. 

    const int i = -1, &r = 0; // legal. 

그래서 첫 번째 변수 인 int 변수는 -1입니다. 그럼 int 참조 r은 입니다 0을 참조하십시오 gotcha

이제 두 번째, const int i = -1, const 참조 r = 0 .. 어떻게?

참조가 const 일 수 없다는 것을 알고 있습니다. const는 참조가 참조하는 것으로,이 책에서는 const 참조가 const 및 non const 오브젝트 (동일한 유형)를 모두 참조 할 수 있다고 말합니다. 이것은 여전히 ​​객체가 아닌 0을 가리킬 수있는 이유를 설명하지 못합니다.

두 번째 구문이 어떻게 유효한지는 모르겠지만 누군가 설명하십시오!

const int &r = 0; 

에서

+1

rvalue 및 lvalue라는 용어를 알고 있습니까? 이것들은 어떤 참조가 (타입과 함께) 바인딩 될 수 있는지를 결정합니다. –

+0

@NirFriedman이 질문했을 때, 나는 대답하지 않았을 때, 나는 그들을 봤 거든 이제 내가 할 .. 고마워! – iMarioOfficial

답변

6

임시 객체는 0 값으로 생성되고, 그 후 r 그 오브젝트에 바인딩된다. 이는 const 참조가 rvalue에 바인딩 될 수 있기 때문에 허용됩니다. 그것은 또한를 rvalue 참조와 함께 작동 : int& 변수는 좌변에 결합 할 수 있기 때문에

int&& r = 0; // ok 

그러나, 그것은 int& 작동하지 않습니다.

참조가 바인딩되는 임시 개체는 참조가 범위를 벗어날 때까지 유지됩니다. https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/

+0

OK 그래서 const 참조는 const 참조로 변환 될 수있는 모든 것에 바인딩 될 수 있지만 int 참조는 int, period,? – iMarioOfficial

+0

@iMarioOfficial 변환 연산자가'int &'인 객체를'int &'에 대한 이니셜 라이저로 사용할 수 있습니다. 최종선은 초기화를 위해 lvalue를 얻을 수 있어야한다는 것입니다. – Brian

+0

Ohh ok 방금 lvalue와 rvalue에 대해 읽었습니다. 감사합니다. – iMarioOfficial

1

C 참조 ++ 구체적 r- 수치가 CONST 좌변 기준에 결합되는 것이 허용되므로이 완벽 표준 순응이다

const int &r = 0; 

Reference

  • r- 수치를 위해 사용될 수있다 const 1 값 참조을 초기화합니다.이 경우 rvalue로 식별되는 객체의 수명은 참조 e 범위까지 확장됩니다 nds.