2013-07-25 1 views
0

는 가정C++에서 참조 및 메모리 요구 사항

int i=10; 
int &j=i; //a reference in C++,don't confuse it with pointers & address 

j는 단순히 참고로 메모리에 어떤 공간이 필요합니까?

+2

'int &j=i; '은 (는) 잘못된 변환입니다. – billz

+0

@AmoghDikshit 그 이유는 무엇이며, OP는 자신의 실수를 분명히 이해하지 못합니다. – jwbensley

+0

'j'는 포인터와 혼동하는 경우에 참조입니다. –

답변

0

먼저 당신이 잘못 초기화를하고있다의 루시안에 의해 말했다.

참조는 변수의 메모리 위치에 주어진 이름입니다. 원래 변수 이름이나 참조를 통해 변수 내용에 액세스 할 수 있습니다. 다음과 같은 선언을 읽을 수 있습니다 : 같은

int &j=i; 

:

ji 초기화 정수 참조입니다.

음, 공간을 차지하는 공간은 구현에 따라 다르며, 어딘가에 저장되는 것이 아니라 레이블로 생각할 수 있습니다.

From C++ Standard (§ 8.3.2 #4)

It is unspecified whether or not a reference requires storage

중점은 내 것입니다.

* 주 - * 참조는 일반적으로 함수 인수 목록 및 함수 반환 값에 사용됩니다.

+0

컴파일러는 참조를 포인터로 구현하므로 공간을 소비합니다. –

+1

@ NikosC. 때때로. 지역 변수로서, 어떤 컴파일러가 참조를 위해 메모리를 할당한다면 나는 놀랄 것이다. –

3

const 참조를 const 값으로 바인딩 할 수 없습니다.

invalid initialization of reference of type ‘int&’ from expression of type ‘const int’

당신이 (예를 들어, 함께 const_cast)이 문제를 해결받을 수 있나요 당신은 원래 const 값을 수정하고 있기 때문에, 코드가 정의되지 않은 동작을한다하더라도 : 컴파일러는 당신에게 오류를 제공해야합니다.

Does i takes any space in the memory as its simply a reference?

구현 세부 사항입니다. 완벽하게 최적화 할 수 있습니다. 당신이 알아야 할 것은 j이 단지 i의 닉네임이라는 것입니다. 당신이 상수 값 에 대한 참조를 할당 할 때

0

오류 ": '초기화': 오류 C2440 '을 &을 int로'에 'CONST INT'에서 변환 할 수 없습니다"

모든