我也贴出来我的g++编译器的具体情况吧,代码我稍作了改动,如下
#include <iostream>
int main()
{
int a,b;
a=3;
b=(a++)+(++a)+(a++);
std::cout << b << std::endl;
std::cout << a << std::endl;
return 0;
}
g++生成的对应汇编代码(AT&T格式)
.file "selfplustest.cc"
.local _ZStL8__ioinit
.comm _ZStL8__ioinit,1,1
.text
.globl main
.type main, @function
main:
.LFB969:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq 3, -4(%rbp)
addl 1, -4(%rbp)
addl _ZSt4cout, %edi
call _ZNSolsEi
movl _ZSt4cout, %edi
call _ZNSolsEi
movl 0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE969:
.size main, .-main
.type _Z41__static_initialization_and_destruction_0ii, @function
_Z41__static_initialization_and_destruction_0ii:
.LFB975:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq 1, -4(%rbp)
jne .L3
cmpl _ZStL8__ioinit, %edi
call _ZNSt8ios_base4InitC1Ev
movl Missing open brace for subscriptMissing open brace for subscript_ZStL8__ioinit, %esi
movl Missing open brace for subscriptMissing open brace for subscript65535, %esi
movl $1, %edi
call _Z41__static_initialization_and_destruction_0ii
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE976:
.size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main
.section .init_array,"aw"
.align 8
.quad _GLOBAL__sub_I_main
.hidden __dso_handle
.ident "GCC: (Debian 4.7.1-2) 4.7.1"
.section .note.GNU-stack,"",@progbits
编译时的警告,可见这种用法是不推荐的
程序执行后的结果
12
6
200字以内,仅用于支线交流,主线讨论请采用回复功能。