C ++ 이중 주소 연산자? (&&)
STL 소스 코드를 읽고 있는데 &&
주소 연산자가 무엇을해야하는지 전혀 모른다 . 다음은 코드 예제입니다 stl_vector.h
.
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
"주소 주소"가 의미가 있습니까? 왜 하나가 아닌 두 개의 주소 연산자가 있습니까?
이것은 C ++ 11 코드입니다. C ++ 11에서 &&
토큰은 "rvalue 참조"를 의미하는 데 사용될 수 있습니다.
&&
C ++ 11의 새로운 기능입니다. int&& a
"a"는 r- 값 참조를 의미합니다. &&
일반적으로 함수의 매개 변수를 선언하는 데만 사용됩니다. 그리고 그것은 r- 값 표현 만을 취합니다. r- 값이 무엇인지 모른다면 간단한 설명은 메모리 주소가 없다는 것입니다. 예를 들어 숫자 6과 문자 'v'는 모두 r- 값입니다. int a
a는 l- 값이지만 (a+2)
r- 값입니다. 예를 들면 다음과 같습니다.
void foo(int&& a)
{
//Some magical code...
}
int main()
{
int b;
foo(b); //Error. An rValue reference cannot be pointed to a lValue.
foo(5); //Compiles with no error.
foo(b+3); //Compiles with no error.
int&& c = b; //Error. An rValue reference cannot be pointed to a lValue.
int&& d = 5; //Compiles with no error.
}
유익한 정보가되기를 바랍니다.
&&
C ++ 11의 새로운 기능으로, 함수가 RValue-Reference , 즉 파괴 될 인수에 대한 참조를 허용 함을 나타냅니다 .
다른 답변에서 언급 &&
했듯이이 컨텍스트 의 토큰은 C ++ 0x (다음 C ++ 표준)에 새로 도입되었으며 "rvalue 참조"를 나타냅니다.
Rvalue 참조는 다가오는 표준에서 가장 중요한 새로운 것 중 하나입니다. 그것들은 객체에서 '이동'의미를 지원하고 함수 호출의 완벽한 전달을 허용합니다.
다소 복잡한 주제입니다. 최고의 소개 중 하나 (단순한 설명이 아님)는 Stephan T. Lavavej의 "Rvalue References : VC10의 C ++ 0x 기능, 2 부"기사입니다.
이 기사는 여전히 꽤 많이 읽었지만 가치가 있습니다. Microsoft VC ++ 블로그에 있지만 모든 정보 (또는 거의 모든 정보)는 모든 C ++ 0x 컴파일러에 적용 할 수 있습니다.
나는 그것이 이동 연산자라고 생각합니다. operator=
대입 연산자입니다 (예 :) vector x = vector y
. clear()
함수 호출은 메모리 누수를 방지하기 위해 벡터의 내용을 삭제하는 것처럼 같은 소리. 연산자는 새 벡터에 대한 포인터를 반환합니다.
이 방법,
std::vector<int> a(100, 10);
std::vector<int> b = a;
for(unsigned int i = 0; i < b.size(); i++)
{
std::cout << b[i] << ' ';
}
벡터에 값을 주었지만 벡터 b에는 값이 있습니다. 의 마법입니다 operator=()
!
참고 URL : https://stackoverflow.com/questions/4549151/c-double-address-operator
'developer tip' 카테고리의 다른 글
Visual Studio 코드-모든 빈 줄 삭제-정규식 (0) | 2020.07.24 |
---|---|
Visual Studio에서 미국식 키보드 레이아웃을 임의로 채택한 것으로 보입니다. (0) | 2020.07.24 |
Visual Studio에서 마지막 커서 위치로 다시 이동하는 방법은 무엇입니까? (0) | 2020.07.24 |
Gulp 오류 : 'jshint / src / cli'모듈을 찾을 수 없습니다 (0) | 2020.07.24 |
UIRefreshControl-UITableViewController가 UINavigationController 내에있을 때 beginRefreshing이 작동하지 않습니다. (0) | 2020.07.24 |