我的交换程序无法使用模板?

My swap program is not working using Template?

我正在使用 Template 关键字来 运行 简单的交换程序,请帮助我,为什么我的程序无法运行?

#include<iostream>
using namespace std;

template<typename T>
void Swap(T m, T n)
{
    T temp;

    temp = m;
    m = n;
    n = temp;
}

int main()
{
    int i = 5, j = 6;

    cout << "Before swapping:" << endl;
    cout << i << " and " << j << endl;

    Swap(i, j);

    cout << "After Swapping:" << endl;
    cout << i << " and " << j << endl;

    return 0;
}

输出:

你正在复制你的论点,因为你在按价值接受它们。如果你想在函数中更新它们,你应该参考它们:

void Swap(T& m, T& n)
//         ^     ^

此外,您的实现有一个隐式约束,即 T 必须是默认可构造的,这对于交换不是必需的。您应该直接构建 temp 变量:

T temp = m;

你最好还是使用移动语义来避免复制:

T temp(std::move(m)); // or T temp = std::move(m);
m = std::move(n);
n = std::move(temp);