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

为何将swap函数置于文件末尾时交换功能会生效?

为什么未声明原型的swap函数放在main后反而能成功交换?
  • 核心原因是你调用的不是自己写的swap函数,而是标准库的std::swap。
  • 当自定义swap函数放在main之前时,编译器优先使用你定义的版本——这个版本采用值传递,函数内修改的只是参数的副本,无法影响main函数里的原变量,所以交换失效。
  • 当自定义swap放在main之后且未声明原型时,编译器会尝试查找可用的swap函数。由于你的代码中使用了using namespace std;,编译器会匹配到标准库提供的std::swap模板函数,该函数通过引用传递实现,能直接修改传入的原变量,因此交换操作生效。
  • 补充说明:严格遵循C++标准的话,调用未声明的函数属于编译错误,但部分编译器会兼容处理,再加上using namespace std;引入了标准库的swap,才出现了这种看似矛盾的现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:40:16