Re: Function arguments: References vs pointers
On Jun 22, 5:10 am, Joe <jgr...@nsisoftware.com> wrote:
Pulling things back on topic a bit. No one explicitly mentioned this,
but if the function with the reference were also inlined, then the
code generated might manipulate the object directly without ever
having to take the address of the original object and without having
to allocate space for the pointer. Remember that in C++ references
need not have a physical presence at all.
Yes, but I'm curious why don't you expect the same effect in a case of
the pointer-taking function is inlined too? Let's see what's g++ can
do about it...
$ cat ref-or-ptr-arg-inlined.cpp
#include <cstdio>
inline void f(int* k)
{
*k = 1;
}
inline void g(int& k)
{
k = 2;
}
int
main(void)
{
int i;
f(&i);
int j;
g(j);
printf("%d %d\n", i, j); // no std::cout for the sake of
disassembly simplicity ;-)
}
$ g++ -O2 ref-or-ptr-arg-inlined.cpp
$ ./a.out
1 2
$ gdb a.out
....
(gdb) disassemble main
Dump of assembler code for function main:
....
0x0804847e <main+14>: sub $0x14,%esp
0x08048481 <main+17>: movl $0x2,0x8(%esp)
0x08048489 <main+25>: movl $0x1,0x4(%esp)
0x08048491 <main+33>: movl $0x804857c,(%esp)
0x08048498 <main+40>: call 0x8048394 <printf@plt>
0x0804849d <main+45>: add $0x14,%esp
....
End of assembler dump.
(gdb)
Regards
--
Alex Shulgin
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]