(gdb) disas func
Dump of assembler code for function func:
0x00000000004004b8 <func+0>: push %rbp
0x00000000004004b9 <func+1>: mov %rsp,%rbp
0x00000000004004bc <func+4>: movl $0x64,0xfffffffffffffff0(%rbp)
0x00000000004004c3 <func+11>: movb $0x61,0xfffffffffffffff4(%rbp)
0x00000000004004c7 <func+15>: mov 0xfffffffffffffff0(%rbp),%rax
0x00000000004004cb <func+19>: leaveq
0x00000000004004cc <func+20>: retq
End of assembler dump.
t_test func()
{
t_test t;
t.i = 100;
t.c = 'a';
return t;
}
Таким образом, кажется, что он возвращает локальную переменную t
, но гарантируется ли такая работа, разве она не должна ссылаться на какие-либо локальные переменные при возврате??
int f() { ...
означает, что тип объекта, который возвращаетf
, равенint
. Иreturn 5;
означает, что мы возвращаем значение 5. Точно так жеint q = 3; return q;
означает, что мы возвращаем значениеq
, то есть 3. На самом деле мы не возвращаемq
. - person David Schwartz   schedule 31.03.2016