【问题标题】:C++ Template Swap FunctionC++ 模板交换函数
【发布时间】:2013-04-26 01:17:20
【问题描述】:

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

以下是我的代码,但一定有问题。

谁能改进我的代码?

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

我应该将它作为常量引用传递吗?但我正在改变价值观对吗?

请告诉我谢谢!!

【问题讨论】:

  • 这样没问题,不过你应该顺便使用std::swap
  • 您遇到了什么问题?据我所知,它看起来是正确的。
  • 如果你通过 const-reference 传递它不能被修改,编译器会惩罚你。
  • 尝试编写模板 void swap ( T& a, T& b )

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


【解决方案1】:

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

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

int main()
{
    int n(0);

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

在您的代码中这是不可能的,因为左值不能绑定到右值。但是忽略这个小功能,您的代码就可以了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用 STL 提供的标准交换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        相关资源
        最近更新 更多