繁体   English   中英

function 过载在以下情况下如何工作?

[英]How does function overloading work in the following case?

以下代码编译并运行,但我不确定较低级别到底发生了什么。 引用不只是存储被引用的 object 的地址吗? 如果是这样,两个测试函数都接收地址作为参数? 还是 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++ 中的引用更类似于别名而不是指针。 引用本身不是一个单独的变量,但它是现有变量的新“名称”。 在您的示例中,将调用第一个测试,因为您将 integer 传递给 function。 指针是一个单独的变量,它保存另一个变量的地址,因此要调用第二个 function,您必须使用指针调用 test。 像这样.. test(&i); 虽然有点混淆运算符 & 获取变量的地址,而用 & 声明的变量(如int &i声明了一个引用。

您的代码仅与char test(int&i)匹配,因为您将int&传递给 function 并且无法转换为int*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM