2

我正在重新实现 C++ STL 库中的一些方法。还有一个关于通用交换实现的问题:我应该const对临时变量使用修饰符吗?

有我的变种:

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

更新:

我检查了几个 STL 实现;有些人使用 const 而其他人则没有。

我认为,使用 const 可能会限制swap...

我想编写可移植的实现,它是最通用的(接受大多数类)。

4

2 回答 2

4

这就是你应该这样做的方式,也是 tmp 不应该是 const 的原因:

 template<typename T>
 void swap(T& a, T& b)
 {
   T tmp = std::move(a);
   a = std::move(b);
   b = std::move(tmp);//needs to change tmp, so tmp cannot be const
 }

这允许 tmp 的移动分配(如果可能)。

但是,这还有很多细微差别。

于 2013-07-19T19:20:18.477 回答
1

const是编写正确程序的帮助。编译器会验证您没有违反此合同。作者或读者知道该值,因为它在初始化后不会改变。在这种情况下,变量的范围是如此之小,而函数是如此简单,以至于它没有任何区别。保持它的一致性,它不会受伤。

于 2013-07-19T19:18:50.210 回答