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

时间:2015-06-02 09:28:41

标签: c++ templates swap

我使用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;
}

输出:

SCREENSHOT

1 个答案:

答案 0 :(得分:2)

您正在创建参数的副本,因为您按价值获取它们。如果你想在函数中更新它们,你应该参考它们:

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);