由于重载函数都是同名的,编译器如何解析重载函数呢?
发现函数
void
print(
int
i)
编译之后为:(注意它的函数签名变为
——
_Z5printi
)
利用反汇编技术,发现函数void print(int i) 编译之后,它的函数签名为:Z5printivoid print(string str) 编译之后,它的函数签名为:Z5printSs
我们可以发现编译之后,
重载函数的名字变了不再都是
!这样不存在命名冲突的问题了,
但又有新的问题了
——
变名机制是怎样的,
即如何将一个重载函数的签名映射到一个新的标识
我们可以发现编译之后,重载函数的名字变了不再都是print!这样不存在命名冲突的问题了,但又有新的问题了——变名机制是怎样的,即如何将一个重载函数的签名映射到一个新的标识?猜想:
“
返回类型
+
函数名
+
参数列表
”
。
“返回类型+函数名+参数列表”。返回类型
+
函数名
+
参数列表
”
。
“
返回类型
+
函数名
+
参数列表
”
。
“
返回类型
+
函数名
+
参数列表
”
。