[英]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.