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