我正在尝试从C ++ STL库重新实现一些方法。关于通用交换实现还有一个问题:我是否应该对临时变量使用const
修饰符?
有我的变体:
template<typename T>
void swap(T& a, T& b)
{
const T tmp = a;
a = b;
b = tmp;
}
更新:
我检查了几个STL实现;有些人正在使用const,而有些则没有。
我认为,使用const可能会限制swap
...
我想编写可移植的实现,这是最通用的(接受大多数类)。
答案 0 :(得分: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(如果可能的话)。
但是,这有很多细微差别。
答案 1 :(得分:1)
const
是编写正确程序的帮助。编译器会验证您是否违反了此合同。作者或读者知道该值,因为它在初始化后不会改变。在这种情况下,变量的范围非常小,功能非常简单,但不会产生任何影响。保持它的一致性,它不会受到伤害。