2013-10-29 7 views
3

일부 C++ 소스에서 표현식 결과를 상수 숭배로 저장할 수 있음을 알았습니다. 좋아요 :상수 변수 대 상수 참조

const int &x = y + 1; 

이게 무슨 의미인가요? 이에 대한 문서가 있습니까? 나는 그것을 찾을 수 없습니다 .. 나를 위해


이 동등 것 같다 : 프로그램의 결과는 동일하게 유지하기 때문에

const int x = y + 1; 

. 정말 동등한가요?

그렇다면 언어가 왜 처음 작성하는 방식입니까? 혼란스러워 보입니다.

차이가 없다면?

+0

첫 번째 것은 까다 롭습니다. AFAIK는'y + 1'을 계산하여 얻은 임시에 대한 지속적인 참조를 만드는 것입니다. –

+1

@ H2CO3 확실히, AFAIK, 표현식 'y + 1'은 값을 생성하지만 임시 (객체)는 생성하지 않습니다. 따라서 참조 바인딩 자체가 임시를 만듭니다. – dyp

답변

5

차이점은 결과가 복사/이동되는지 여부입니다. 첫 번째 경우 :

const int& x = y + 1; 

y+1의 값은 본질적으로 임시 값으로 저장됩니다. 그런 다음이 임시 결과에 대한 참조 x을 초기화합니다. 다른 경우 :

const int x = y + 1; 

우리는 y + 1를 계산하고 값을 상수 변수 x를 초기화합니다.

실제로 정수를 사용하면 눈에 띄는 차이가 없습니다. y+1이 큰 데이터 구조, 예를 들어 1MB의 데이터 인 경우, 이것은 상당한 차이를 만들 수 있습니다.

+2

또한이 줄 이후의 동작에서 차이점을 발견하는 것은 본질적으로 불가능합니다. 초기화 후에'x'는 똑같은 방식으로 동작합니다. 더 큰 데이터 구조에서는'const X x = y + 1' 내에 복사 생성자를 호출 할 수 있습니다. (또는 그것 * elide * 수도). 반면에,'const X & x = y + 1'은 복사 생성자를 호출하지 않는다고 보장됩니다. –

+0

이것은 언어가 이것을 허용하는 이유에 대해서는 언급하지 않았는데, 나는 당신이 임시 참조를 가진 const 참조를 취하는 함수를 호출 할 수 있도록하는 것과 관련 있다고 생각한다. –

+0

고마워! x가 임시 결과를 나타내는 경우 사용하는 것이 안전합니까? – klm123