2011-01-08 15 views
2

가능한 중복은 :C++ 템플릿의 "&"변수는 무엇입니까?

template <class T,class U> void inline TIntDataSwap2(U data,T i) 
{ 
    unsigned char*& data2=(unsigned char*&)data; 
    data2[0]=(unsigned char)(((unsigned int)i>> 8)&0xff); 
    data2[1]=(unsigned char)(((unsigned int)i>> 0)&0xff); 
}; 

"서명되지 않은 숯불 *"뒤에 "&"의 의미는 무엇인가 :
What does “Class* &cls” mean in C++'s function definition?

는이 코드를 건너 왔어요?

템플릿에서만 사용할 수 있습니까? 나는 전에 그것을 보지 못했고 변수 뒤에 "&"이라는 단어는 Google에 도움이되지 않습니다 ...

+1

* "behind a variable"* 문구가 마음에 들었습니다. : D – Nawaz

답변

1

&은 "변수 뒤에"있지만 형식의 일부는 아닙니다.

아마도 C++에서 참조가 무엇인지 이미 알고있을 것입니다. 이 경우 unsigned char *&unsigned char에 대한 포인터에 대한 참조 일뿐입니다.

템플릿이 완전히 독립적이며, 내부 또는 템플릿 정의 외부 사용될 수

+0

나는 그것을 얻지 않습니까? 나는 포인터를 얻기 위해 변수 앞에서 "&"만 알고있다. "유형 지정자 뒤에"의 의미는 무엇입니까? – user537836

+1

@ user537836 [참조] (http://en.wikipedia.org/wiki/Reference_ (C % 2B % 2B))이며 필수 개념입니다 C++에서 (Wikipedia 기사는 당신에게 좋은 통찰력을 줄 것이다. 그러나 나는 좋은 C++ 책을 얻을 것을 권하고 싶다. (http://stackoverflow.com/questions/388242)). – icecrime

+0

이제 MultiplyByFive (int 및 number) {number * = 5;} >> MultiplyByFive (i)로 호출 <--EQUALS--> void MultiplyByFive (int * number) {* number * = 5;}> > MultiplyByFive (& i) – user537836

1

unsigned char*&unsigned char은 포인터에 대한 참조이다. 항상 포인터/참조 조합을 오른쪽에서 왼쪽으로 읽으십시오. 이것은 템플릿 내에서의 사용에만 제한되지 않습니다.

일반적으로 인수를 함수에 전달하면 C++ (거대한 개체조차도)에서 값으로 전달됩니다. 함수에 전달되는 사본이 만들어집니다. 이것은 추가 메모리를 소비하며 함수가 전달하는 인수를 수정하지 못하게합니다 (복사본 만 가져 오기 때문에). 참조를 사용하면 복사본을 만들지 않으므로 메모리가 더 효율적입니다. 또한 필요한 경우 함수가 인수를 수정할 수 있습니다. 성능 향상 만 원하고 함수에서 인수를 수정하지 않으려면 매개 변수를 const 참조로 선언 할 수 있습니다.

+0

). 전에 참조를 사용했습니다. 나는 당신이 그것을 오른쪽에서 왼쪽으로 읽는 것을 이해한다. 왜냐하면 그것의 주위에 괄호를 넣으면 이것처럼된다 : ((unsigned char *) &) – user537836