developer tip

C ++ 이중 주소 연산자?

optionbox 2020. 7. 24. 20:37
반응형

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 aa는 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=()!

MSDN-이동 생성자를 만드는 방법

참고 URL : https://stackoverflow.com/questions/4549151/c-double-address-operator

반응형