c++에서 임시 대상 의 분석 시기 에 대한 상세 한 설명
c++소스 코드:
class X {
public:
int i;
int j;
~X() {}
X() {}
};
int main() {
X x1;
X();
x1.i = 1;
X x2;
}
대응 하 는 외환 코드:
_main PROC
; 11 : int main() {
push ebp
mov ebp, esp
sub esp, 24 ; x1 x2 24byte
; 12 : X x1;
lea ecx, DWORD PTR _x1$[ebp]; x1 ,
call ??0X@@QAE@XZ ; x1
; 13 : X();
lea ecx, DWORD PTR $T2559[ebp]; ,
call ??0X@@QAE@XZ ;
lea ecx, DWORD PTR $T2559[ebp]; ,
call ??1X@@QAE@XZ ;
; 14 : x1.i = 1;
mov DWORD PTR _x1$[ebp], 1; 1 x1 , 1 x1 i
; 15 : X x2;
lea ecx, DWORD PTR _x2$[ebp]; x2 ,
call ??0X@@QAE@XZ ; x2
; 16 :
; 17 :
; 18 : }
lea ecx, DWORD PTR _x2$[ebp]; x2 ,
call ??1X@@QAE@XZ ; x2
lea ecx, DWORD PTR _x1$[ebp]; x1 ,
call ??1X@@QAE@XZ ; x1
xor eax, eax
mov esp, ebp
pop ebp
ret 0
_main ENDP
위의 외환 코드 를 통 해 알 수 있 듯 이 임시 대상 은 필요 하지 않 은 후에 분석 함 수 를 호출 했다.비록 x2 대상 전에 만 들 어 졌 지만 x2 대상 전에 분석 되 었 다.반면 x1 x2 분석 함수 호출 순 서 는 구조 함수 호출 순서 와 반대 된다.다음 상황 을 살 펴 보 자.
c++의 원본 코드:
class X {
public:
int i;
int j;
int k;
X() {}
~X() {}
};
int main() {
X x1;
X(), x1.i = 1;//
X x2;
}
임시 대상 을 개조 한 후 분점 이 아 닌 쉼표 표현 식 이 있 습 니 다.다음은 외환 코드 입 니 다.
; 12 : int main() {
push ebp
mov ebp, esp
sub esp, 36 ; x1 x2 36
; 13 : X x1;
lea ecx, DWORD PTR _x1$[ebp]; x1 ,
call ??0X@@QAE@XZ ; x1
; 14 : X(), x1.i = 1;//
lea ecx, DWORD PTR $T2560[ebp]; ,
call ??0X@@QAE@XZ ;
mov DWORD PTR _x1$[ebp], 1; 1 x1 , x1 i 1
lea ecx, DWORD PTR $T2560[ebp]; ,
call ??1X@@QAE@XZ ;
; 15 : X x2;
lea ecx, DWORD PTR _x2$[ebp]; x2 ,
call ??0X@@QAE@XZ ; x2
; 16 : }
lea ecx, DWORD PTR _x2$[ebp]; x2 ,
call ??1X@@QAE@XZ ; x2
lea ecx, DWORD PTR _x1$[ebp]; x1 ,
call ??1X@@QAE@XZ ; x1
xor eax, eax
mov esp, ebp
pop ebp
ret 0
_main ENDP
첫 번 째 와 달리 임시 대상 구조 가 끝 난 후에 석조 함 수 를 즉시 호출 하지 않 고 쉼표 뒤의 할당 문 구 를 실행 한 후에 야 호출 된 석조 함수 입 니 다.위 에서 말 한 바 와 같이:
임시 대상 이 석조 함 수 를 호출 하 는 시 기 는 고급 언어 가 실 행 될 때 이 고,고급 언어 가 실 행 된 표 지 는 분점 이다.따라서 임시 대상 이 석조 함 수 를 호출 할 때 는 분점 에 부 딪 혔 을 때 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제4 절 구조 함수 와 분석 함수[4]한 클래스 에 함 수 를 설명 하면construct,이 함 수 는 구조 함수 로 간주 되 고 대상 인 스 턴 스 를 만 들 때 실 행 됩 니 다.분명히 말 하면두 개의 밑줄 입 니 다.다른 모든 함수 와 마찬가지 로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.