raj*_*rni 3 c++ arguments overloading variable-length
这个C++问题似乎非常基础和一般,但我仍然希望有人回答.
1)具有可变长度参数的函数和重载函数之间有什么区别?2)如果我们有一个带有可变长度参数的函数和另一个具有相似参数的同名函数,我们会遇到问题吗?
2)你的意思是以下?
int mul(int a, int b);
int mul(int n, ...);
Run Code Online (Sandbox Code Playgroud)
让我们假设第一个乘以2个整数.第二个乘以nvar-args传递的整数.调用时f(1, 2)不会含糊不清,因为通过"省略号"传递的参数与可能的最高成本相关联.但是,将参数传递给相同类型的参数会与可能的最低成本相关联.所以这个电话肯定会被解决到第一个功能:)
请注意,重载决策仅将参数与同一位置的参数转换进行比较.如果某个参数对的任一函数都有赢家,它将会很难.例如
int mul(int a, int b);
int mul(double a, ...);
Run Code Online (Sandbox Code Playgroud)
想象一下,第一个乘以两个整数,第二个乘以一个由a终止的双精度列表0.0.这个重载集是有缺陷的,并且在被调用时将是不明确的
mul(3.14, 0.0);
Run Code Online (Sandbox Code Playgroud)
这是因为第二个函数在第一个参数中获胜,但第一个函数在第二个参数中获胜.第二个参数的转换成本对于第二个函数而言要高于第一个函数的第一个参数的成本并不重要.一旦确定了这种"交叉"赢家的情况,对这两个候选人的要求就不明确了.