Max*_*xpm 4 c++ overloading ambiguity
考虑以下函数原型:
void Remove(SomeContainer& Vec, const std::size_t Index);
SomeContainer Remove(SomeContainer Vec, const std::size_t Index);
Run Code Online (Sandbox Code Playgroud)
第二个是第一个实现的.也就是说,它们在各个方面在功能上是相同的,除了一个是通过引用传递而另一个是按值传递.
但是,GCC说这些在这种情况下是模糊的,即使第一种形式是唯一一种不返回值的形式:
Remove(SomeContainer, 123);
Run Code Online (Sandbox Code Playgroud)
有没有解决方法,或者我必须为每个表单提出不同的名称?
返回类型不是函数重载的基础.
函数重载只能使用以下条件之一:
调用者可以忽略返回类型,因此它不是函数重载的有效标准.
如上所述,传递值并传递一个Reference会给编译器带来歧义.例如:
void doSomething(int i)
{
}
void doSomething(int &i)
{
}
int main()
{
int val = 10;
doSomething(val); //Ambiguous
}
Run Code Online (Sandbox Code Playgroud)
这里编译器无法确定是否传递val到哪个版本doSomething().它可以对任何版本进行有效的函数调用,因此它在编译时请求帮助(因为这是静态链接)并将调用标记为不明确.
在你的情况下.重命名函数或传递指针参数是一个选择/首选项,这将使两个函数重载(同名但不同的参数类型).但是,在选择首选项时,重要的是要考虑要求和功能将要执行的操作.就个人而言,我不会为了超载而选择指针.如果我确实需要重新设置或使我的参数指向不同的变量,那么选择指针参数是有意义的.
简单的方法是只有两个不同的函数名称.没有开销,它与任何其他函数调用一样高效.
| 归档时间: |
|
| 查看次数: |
5683 次 |
| 最近记录: |