在下列情况下,函数重载如何工作?

时间:2011-05-30 19:46:09

标签: c++

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

int main() {
    int i = 1;
    cout << test(i) << endl;
}

char test(int &i) {
    return 'a';
}

char test(int *i) {
    return 'b';
}

3 个答案:

答案 0 :(得分:7)

由于int&int*是不同的类型而i可以被视为int&但不能被视为int*,因此重载决议在此绝对明确无误

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

答案 1 :(得分:2)

C ++中的引用更像是别名而不是指针。引用本身不是一个单独的变量,但它是现有变量的新“名称”。在您的示例中,第一个测试将被调用,因为您将整数传递给函数。指针是一个单独的变量,它保存另一个变量的地址,因此对于要调用的第二个函数,您必须使用指针调用test。像这样.. test(&i);虽然让运营商和运营商感到困惑。获取变量的地址,而变量是用&amp;像int &i一样声明一个引用。

答案 2 :(得分:1)

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