임시 개체는 임시 값을 저장하기 위해 컴파일러에서 만든 명명되지 않은 개체입니다.
설명
경우에 따라 컴파일러가 임시 개체를 만들어야 합니다. 다음과 같은 이유로 이 임시 개체를 만들 수 있습니다.
초기화 중인 참조의 기본 형식과 다른 형식의 이니셜라이저로
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-값이 아니면 기본 개체 형식의 임시 형식이 만들어집니다. 초기화 식에 의해 초기화됩니다. 이 임시 개체는 이 개체가 바인딩된 참조 개체가 제거된 후 즉시 제거됩니다. 이 소멸은 임시를 만든 식 이후에 발생할 수 있으므로 수명 확장이라고도 합니다.식 평가의 효과로 만든 임시:
첫 번째 범주에 맞지 않고 식 계산의 효과로 생성되는 모든 임시는 식 문(즉, 세미콜론)의 끝이나for
,if
,while
,do
및switch
문에 대한 제어 식의 끝에서 제거됩니다.
참고 항목
Herb Sutter의 블로그, 레퍼런스, 단순하게