임시 개체

임시 개체는 임시 값을 저장하기 위해 컴파일러에서 만든 명명되지 않은 개체입니다.

설명

경우에 따라 컴파일러가 임시 개체를 만들어야 합니다. 다음과 같은 이유로 이 임시 개체를 만들 수 있습니다.

  • 초기화되는 참조의 기본 형식과 다른 형식의 이니셜라이저를 사용하여 참조를 초기화 const 합니다.

  • UDT(사용자 정의 형식)를 반환하는 함수의 반환 값을 저장합니다. 이러한 임시는 프로그램에서 반환 값을 개체에 복사하지 않는 경우에만 만들어집니다. 예시:

    UDT Func1();    //  Declare a function that returns a user-defined
                    //   type.
    
    ...
    
    Func1();        //  Call Func1, but discard return value.
                    //  A temporary object is created to store the return
                    //   value.
    

    반환 값이 다른 개체에 복사되지 않으므로 임시 개체가 만들어집니다. 임시 개체가 만들어지는 보다 일반적인 경우는 오버로드된 연산자 함수를 호출해야 하는 식을 계산하는 경우입니다. 이러한 오버로드된 연산자 함수는 종종 다른 개체에 복사되지 않는 사용자 정의 형식을 반환합니다.

    ComplexResult = Complex1 + Complex2 + Complex3 식을 참조하십시오. Complex1 + Complex2 식이 계산되고 결과가 임시 개체에 저장됩니다. 다음으로 식 임시+ Complex3 가 계산되고 결과가 복사 ComplexResult 됩니다(대입 연산자가 오버로드되지 않은 것으로 가정).

  • 캐스팅 결과를 사용자 정의 형식에 저장하려는 경우. 지정된 형식의 개체를 사용자 정의 형식으로 명시적으로 변환하는 경우 새 개체는 임시 개체로 구성됩니다.

임시 개체는 생성 지점과 소멸 지점으로 정의된 수명을 갖습니다. 둘 이상의 임시 개체를 만드는 식은 결국 생성 순서를 반대로 삭제합니다.

임시 삭제가 발생하는 경우 사용 방법에 따라 달라집니다.

  • 참조를 초기화하는 const 데 사용되는 임시:
    이니셜라이저가 초기화되는 참조와 동일한 형식의 l-값이 아니면 기본 개체 형식의 임시 형식이 만들어집니다. 초기화 식에 의해 초기화됩니다. 이 임시 개체는 바인딩된 참조 개체가 제거된 직후에 제거됩니다. 이 소멸은 임시를 만든 식 이후에 발생할 수 있으므로 수명 확장이라고도 합니다.

  • 식 평가의 효과로 만든 임시:
    첫 번째 범주에 맞지 않고 식 계산의 효과로 생성된 모든 임시는 식 문의 끝(즉, 세미콜론) 또는 , if, whiledoswitch 문에 대한 for제어 식의 끝에 제거됩니다.

참고 항목

참조에 허브 Sutter의 블로그, 단순히