STL算法C++中的Swap()

Swap() in STL algorithm C++

为什么 swap() 在 STL 算法中不获取变量的地址并传递变量工作得很好,但在 C++ 中按值调用不更改实际值但按地址调用更改实际参数?

std::swap其实就是一个模板函数。因此,如果您查看调用 std::swap 的方式:

template< class T >
void swap( T& a, T& b ) noexcept

这意味着尽管您似乎是按值传递参数,但模板实际上会将类型推断为参数的相应地址。

例如,如果您有这样的代码:

int a1 = 1;
int a2 = 2;
std::swap(a1, a2);

当你 运行 std::swap(a1, a2) 时,a1a2 的类型将被传递给模板,这使得 T 成为 int.

然后将函数中的T替换为int,生成如下函数:

void swap(int& a, int& b)
{
...
}

所以 std::swap 实际上是在获取这些值的地址,但是你在调用函数时不需要写出它们。