C ++模板交换功能

时间:2013-04-26 01:17:20

标签: c++ templates reference pass-by-reference swap

我需要创建一个交换函数来交换T类型的两个参数。

以下是我的代码,但有些事情一定是错的。

有人能改进我的代码吗?

template<typename T>
void swap (T& a, T& b)
{ T temp = a;
  a = b;
  b = temp;
}

我应该将其作为常量参考传递吗?但我正在改变价值观吗?

请让我知道谢谢!!

3 个答案:

答案 0 :(得分:0)

如果您的编译器支持它,您应该通过rvalue-reference传递参数并使用std::move转换为rvalues:

template <class T>
void swap(T&&, T&&);

int main()
{
    int n(0);

    swap(std::move(n), 5); // n is now 5
}

在你的代码中,这是不可能的,因为左值不能绑定到rvalues。但是这个小功能被忽视了你的代码就好了。

答案 1 :(得分:0)

您可能遇到的问题是交换功能的命名。请尝试将其命名为mySwap。我曾经遇到过同样的问题。交换函数在c ++中预定义;

答案 2 :(得分:-2)

使用STL提供的标准交换。