为了实现函数重载,C++编译器一般会采用名字改编的方式为每个重载的函数生成一个独一无二的名字,这样在链接的时候就能找到正确的重载版本,例如:
int test(bool x)
{
return 1;
}
int test(int x)
{
return 100;
}
int main(void)
{
return 0;
}
查看重载后的函数名称:
方法1:利用nm和c++filt
root@ubuntu:/home/qpz# nm test.o
0000001d T main
00000000 T _Z4testb
00000013 T _Z4testi
root@ubuntu:/home/qpz# c++filt _Z4testb _Z4testi
test(bool)
test(int)
方法二:利用objdump
080483ed <_Z4testb>:
80483ed: 55 push %ebp
80483ee: 89 e5 mov %esp,%ebp
80483f0: 83 ec 04 sub $0x4,%esp
80483f3: 8b 45 08 mov 0x8(%ebp),%eax
80483f6: 88 45 fc