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

问题描述

| 以下代码可以编译并运行,但是我不确定较低级别上到底发生了什么。引用不只是存储被引用对象的地址吗?如果是这样,两个测试功能都将接收地址作为参数吗?还是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);
有点混淆运算符&来获取变量的地址,而用&像
int &i
声明的变量则声明了引用。     ,        您的代码仅与
char test(int&i)
匹配,因为您将
int&
传递给函数,并且不能转换为
int*
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...