在 C++ 中重载引用类型时对函数的调用不明确

问题描述 投票:0回答:1

我用两种不同的参数类型重载函数 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中的问题?

c++ overloading pass-by-reference pass-by-value ambiguous
1个回答
0
投票

对你的问题的评论有很好的解释。

但是出于一些明显的原因,如果您想编译代码,请进行第二个整数声明

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.
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.