You need to enable JavaScript to run this app. 形参为int*&类型的C++函数为何可接收int类型实参完成调用?
优惠活动
大模型
产品
解决方案
定价
更多

形参为int*&类型的C++函数为何可接收int类型实参完成调用?

问题原因解析

你观察到的现象核心原因是你实际调用的根本不是自己定义的swap函数,而是C++标准库提供的std::swap模板函数,具体可以拆解为以下几点:

  • 首先你的代码里必然隐含了using namespace std;声明(你贴出的代码省略了头文件和全局声明部分,能直接用cout而不用写std::cout也印证了这一点),这会把标准库的名字引入全局命名空间参与名字查找。
  • 你自己定义的swap函数形参是int* &(int指针的左值引用),传入int类型的变量完全无法匹配该形参要求。编译器在查找匹配的swap重载时,会找到标准库std::swap专门用于交换两个同类型变量的重载,该重载接收两个int &类型的形参,和你传入的int变量完美匹配,所以最终执行的是标准库的交换逻辑,自然能正常完成值交换。
  • 你可以通过强制指定全局命名空间的方式验证上述结论:把调用代码改成::swap(x, y),此时编译器会强制匹配你自己定义的全局swap函数,就会直接报类型不匹配的编译错误。
  • 额外说明:哪怕你没有主动包含定义std::swap的<utility>头文件,很多常用标准库头文件(比如<iostream>、<algorithm>)都会间接引入<utility>,所以依然可以找到std::swap的定义。

内容的提问来源于stack exchange,提问作者sushruta19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 07:54:01