You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何向形参为指针的swap函数传入普通变量时代码仍可编译?

问题原因分析
  • 核心原因是你调用的根本不是自己定义的swap(int *a, int *b)函数,而是C++标准库提供的std::swap模板函数

具体细节解释

  1. 你代码开头写了using namespace std;,会把std命名空间下的所有名称引入全局作用域
  2. C++标准库的<iostream>头文件(或者其间接引入的其他标准头文件)内置了模板函数template< class T > void swap(T& a, T& b),作用是交换两个T类型变量的值,接受的是左值引用参数,刚好可以匹配你传入的两个int类型普通变量,编译器会优先选择这个参数完全匹配的重载版本,而不是你写的需要做指针转换的版本
  3. 你自己实现的swap函数存在逻辑错误:就算你手动传入&x和&y调用它,也无法完成值交换——函数内部交换的是指针形参的本地副本,不会影响外部实参的指针指向,更不会修改指针指向的内存的值

验证方法

你可以做以下任意一种修改,就能触发参数不匹配的编译报错,证明你原本的调用没有用到自定义的swap:

  • 删除代码开头的using namespace std;语句
  • 将swap调用改为::swap(x,y),强制指定调用全局作用域下的函数

内容的提问来源于stack exchange,提问作者praful h y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:21:03