函数重载在以下情况下是如何工作的
How does function overloading work in the following case?
以下代码编译并运行,但我不确定下层到底发生了什么。引用不是只存储被引用对象的地址吗?如果是,那么两个测试函数都在接收一个地址作为参数?或者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*
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?