2009-11-04 5 views
1

C++에서 참조로 전달되는 값의 값을 얻는 방법 : I에 의해 전달 된 정수의 크기와 동일한 다른 카운터를 설정해야이 기능의 구현에서 나는 다음과 같은 선언하는 기능을 가지고

void cleanValid(int valid[][4], int &size, int index); 

참고. 나는 다음과 같은 일을 시도했다 :

int count; 
count = size; 

내가 실수하지 않는다면, count의 값을 변경하면 크기의 값도 변경 될 것이다. 나는 이것이 일어날 수 없다. 크기의 가치를 개수로 복사하고 독립적으로 유지하는 방법은 무엇입니까?

+1

또한,'int count = size;'를 쓰는 것이 더 나을 것입니다. 초기화되지 않은 변수는 악몽이고 컴파일러는 모두 활성화하면 경고를 제공해야합니다. 보다 넓은 범위를 원할 경우, 예를 들어'int count = 0;'초기화에 마술 값을 사용합니다. 그러나 정의되지 않은 값으로 두지 마십시오 (C++은 디버그 모드에서도 내장 함수가 초기화된다는 것을 보장하지 않습니다) 그럼에도 불구하고 일부 컴파일러는 VC++와 같은 기능을 수행합니다. –

+0

IMO 초기화되지 않은 값은 마법 초기화 값을 사용하는 것보다 낫습니다. 실수로 초기화되지 않은 변수를 사용하면 컴파일러 경고가 발생할 수 있습니다. 뜻하지 않은 값을 실수로 사용하면 코드가 예상 한대로 작동하지 않으며 경고 메시지가 표시되지 않습니다. 0으로 명시 적으로 초기화하면 0이 의미하는 상황에 대해 저장해야합니다. –

답변

12

아니요, 잘못 생각한 것 같습니다. 참조에서 참조가 아닌 변수로 읽는다면 두 변수 사이에 어떤 종류의 연결도 설정하지 않습니다. 그 당시에는 size 값의 독립적 인 복사본이 있습니다. 당신 size의 값에 영향을을 원한다면

, 당신은에 대한 참조를 사용하는 것 :

int& count = size; 

/* ... */  
count= 32; /* This will change size, too. */ 
2

int count = size복사 카운트로 크기의 값입니다. 복사본을 수정하고 있기 때문에 카운트를 변경하면 크기는 영향을받지 않습니다.

3

size을 변경하지 않으려면 값/const 참조로 전달하지 않으시겠습니까? 두 옵션 모두에서

void cleanValid(int valid[][4], int size, int index); 

또는

void cleanValid(int valid[][4], const int &size, int index); 

당신이 size이 변경되지 않도록 - 그것의 컴파일러 돌봐을 시켜서.

+0

첫 번째 예에서 크기를 직접 사용할 수 있다는 이점이 있습니다. 원하는 모든 것을 할 수 있으며 로컬 변수에 다시 복사 할 필요가 없습니다. 또한, 어떤 경우에는 int가 참조보다 작기 때문에 복사하기가 더 적을 수 있습니다. – Tim

관련 문제