我使用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;
}
输出:
答案 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);