【发布时间】:2013-01-23 04:32:55
【问题描述】:
我定义了两个函数:
1).
template<class T> inline
void swap(T &first, T &second)
{
if (&first != &second)
{
T tmp = first;
first = second;
second = tmp;
}
}
2).
template<typename T>
inline void SwapMe(T *first, T *second)
{
if(*first != *second)
{
T tmp = *first;
*first = *second;
*second = tmp;
}
}
哪个实现更好(第一个等于 std::swap() )?
【问题讨论】:
-
它们的语义有些不同。
-
还有不同的要求。第二个需要
operator!=(T,T),或者兼容的东西。 -
因为这是 C++,你应该只使用
std::swap<t>,尤其是因为在 C++11 中它将使用移动语义。 -
您可能在
SwapMe中指的是if (first != second)。或者如果不是,那么您可能在swap中表示if (first != second)。目前swap比较地址,而SwapMe比较指向的对象的值。这种差异与函数是采用引用参数还是指针参数无关。
标签: c++ templates stl std swap