我遇到了函数重载的问题,可能非常愚蠢和简单,但无法提出解决方案。我定义了 2 个重载函数:
void pp(int) {cout << "1";}
void pp(int&) {cout << "2";}
后来我试图打电话给他们。调用第一个很容易,例如pp(1);
临时对象不能分配给非常量引用,因此没有歧义。但是我应该写什么来调用函数pp(int&)
?我真的不知道。编译器允许这种重载,所以我想有一种方法可以调用这两个函数。否则,让这种重载毫无意义。
另一个类似的问题如下所示:
void p(const int) {cout << "1";}
void p(const int&) {cout << "2";}
编译器允许这种重载,但我不知道如何调用任何函数而不会产生歧义。有什么线索吗?
编辑:这只是一个考虑它的例子,而不是在实际程序或其他东西中使用它。这里提供的代码显然很丑陋,只显示了某种问题。
主要结论应该是,即使编译器允许某些重载,程序员也应该注意歧义。