函数重载在以下情况下是如何工作的

How does function overloading work in the following case?

本文关键字:何工作 工作 重载 情况下 函数      更新时间:2023-10-16

以下代码编译并运行,但我不确定下层到底发生了什么。引用不是只存储被引用对象的地址吗?如果是,那么两个测试函数都在接收一个地址作为参数?或者C++实现能够以其他方式区分这些类型吗?

int main() {
    int i = 1;
    cout << test(i) << endl;
}
char test(int &i) {
    return 'a';
}
char test(int *i) {
    return 'b';
}

由于int&int*是不同的类型,i可以被视为int&,但不能被视为int*,因此过载解决方案在这里是绝对明确的。

在这一点上,引用只是一种有点隐蔽的指针并不重要。从语言的角度来看,它们是不同的类型。

C++中的引用更类似于别名,而不是指针。引用本身不是一个单独的变量,但它是现有变量的新"名称"。在您的示例中,第一个测试将被调用,因为您正在向函数传递一个整数。指针是一个单独的变量,它保存着另一个变量的地址,所以对于要调用的第二个函数,您必须用指针调用test。就像…test(&i);虽然有点混淆了运算符&获取变量的地址,而用&如CCD_ 7声明引用。

您的代码只与char test(int&i)匹配,因为您将int&传递给函数,而该函数无法转换为int*