我用两种不同的参数类型重载函数 f 。
在source.h中,我声明了两个函数。
void f(int&); void f(int);
我有两个函数,一个接受引用类型,另一个接受值(分别是按引用传递和按值传递)。
在source.cpp中我定义了它们
void f(int& a){
a + 1;
}
void f(int a){
a + 1;
}
然后,在主函数中
int main() {
int a = 1;
int& b = a;
f(b);
}
编译器 (clang-tidy) 检测到一个问题:对 f 的调用不明确。为什么会发生这种情况? int& 和 int 是两种不同的类型吗?如果是这样,为什么编译器没有检测到定义函数的source.cpp中的问题?
对你的问题的评论有很好的解释。
但是出于一些明显的原因,如果您想编译代码,请进行第二个整数声明
const
(我的意思是const int& b = a;
)。
#include "iostream"
void f(int& a) {
a + 1;
}
void f(int a) {
a + 1;
}
int main()
{
int a = 1;
const int& b = a;
f(b); //But this will call f(int) only. Refer comments to your question.
}