为何将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
相关产品推荐
相关产品推荐

