c++ error: call to 'g' is ambiguous. By reference and regular function argument

c++ error: call to 'g' is ambiguous. By reference and regular function argument

在这段代码中,我想调用第二个函数(带有引用参数)。我该怎么做?这甚至可能?

void g(int){ std::cout << 1; }
void g(int&){ std::cout << 2; }

int main() {
  int i = 42;
  g( i ); // want to output "2"
}

你想在调用 g(42) 时有 1 和在调用 g(i) 时有 2 吗?

那你应该把第一个函数的原型改成const int &:

#include <iostream>

void g(const int&){ std::cout << 1; }
void g(int&){ std::cout << 2; }

int main() {
  int i = 42;
  g( i ); // want to output "2"
}

对于 g(i)int &const int & 更适合,因此它将调用第二个。

你不能完全那样做。要重载函数,至少有一个参数需要是不同的类型,或者具有不同数量的参数(参见:https://www.cplusplus.com/doc/tutorial/functions2/)。你可以实现类似的东西,但这样是不可取的:

#include <iostream>

void g(int){ std::cout << 1; }
void g(long int&){ std::cout << 2; }

int main() {
  int i = 42;
  g(i); // outputs 1

  long int i = 42;
  g(i); // outputs 2
}

您还可以获得更多关于函数重载的信息here