c++中定数折りたたみ
環境:VC 6コード1:
結果:2 100 0012 FF 7 C 0012 FF 7 C----------------------------------------------------コード2:
結果:100,100,0012 FF 7 C 0012 FF 7 C----------------------------------------------コード3:
結果:100 100 0012 FF 7 C 0012 FF 7 C-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------変えることはできない、しかしどうして*pはまた100を出力することができますか?100はどこにあるの?2段目のコードに引用を加えると、なぜiの値を変更できるのですか?いったい何があったの?
=================================================================================
定数折り畳み:int main(int argc,char*argv[]){const int i=0;int*j=(int*)&i;*j=1;cout<&i<第2段は本質的に第3段と同じであるべきだ.2番目のセグメントでは、コンパイラが場所を探して2を保存し、匿名変数に相当します.
int
main() { const int i=2
; int* p=(int*)(&
i); *p=100
; cout<<"i : "<<i<<
endl; cout<<" : "<<*p<<
endl; cout<<" : "<<p<<
endl; cout<<"i : "<<&i<<
endl; return 0
; }
結果:2 100 0012 FF 7 C 0012 FF 7 C----------------------------------------------------コード2:
int
main() { const int& i=2; //
int* p=(int*)(&
i); *p=100
; cout<<"i : "<<i<<
endl; cout<<" : "<<*p<<
endl; cout<<" : "<<p<<
endl; cout<<"i : "<<&i<<
endl; return 0
; }
結果:100,100,0012 FF 7 C 0012 FF 7 C----------------------------------------------コード3:
int
main() { int a=2; //
const int i=a; // a
int* p=(int*)(&
i); *p=100
; cout<<"i : "<<i<<
endl; cout<<" : "<<*p<<
endl; cout<<" : "<<p<<
endl; cout<<"i : "<<&i<<
endl; return 0
; }
結果:100 100 0012 FF 7 C 0012 FF 7 C-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------変えることはできない、しかしどうして*pはまた100を出力することができますか?100はどこにあるの?2段目のコードに引用を加えると、なぜiの値を変更できるのですか?いったい何があったの?
=================================================================================
定数折り畳み:int main(int argc,char*argv[]){const int i=0;int*j=(int*)&i;*j=1;cout<&i<