c – 我们可以仅基于参数是值还是引用来重载函数?

我的答案没有!因为按值传递并通过引用传递看起来与调用者相同.

但是,下面的代码编译正确

class A {

public:
void f(int i) {}    

void f(int& i) {}
};

但是当我尝试使用它时,存在编译错误.

int main () {

   A a;
   int i = 9;
   int& j = i;
   a.f(1);
   a.f(i);
   a.f(j);
  return 0;
}

为什么即使不知道它将被使用,编译器也不会禁用它?

解决方法

是的,它们可以根据参考而重载.这就是为什么让它们像这样共存是完全正常的;它们是不同的.

问题与歧义有关.虽然f(1)只能在一个变体上调用,但f(i)可以在两者上调用.两者都不可取,因此您会出现歧义错误.如果添加了第三个函数foo(const int&),则所有调用都是不明确的.但是所有这些仍然是彼此的重载,并且没有冲突.

我同意能够有一个函数的三个重载并且能够直接调用none是很奇怪的.也许其他人有更多要补充.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...