template <class T>
void swap(T& a, T& b){
T tmp = a; a = b; b = tmp;
}
我正在读一本书,它告诉我上面的代码不适用于数组,除非我们重载“=”运算符。我不明白为什么它不应该工作。我们不是将指针切换到数组的第一个索引吗?
最佳答案
首先,如果您将数组作为参数传递,类型 T
将被推断为数组类型,这会导致问题,因为您不能分配数组,只能复制它们。
然后你误以为你可以切换指针,这是不可能的。 如果您有两个指针,交换它们可以正常工作,但您不能像那样只交换数组。并且也不可能在调用中直接使用地址操作符来使用指向数组的指针,因为这将尝试将引用绑定(bind)到不可能的临时值。
使用您的函数“交换数组”的唯一解决方案类似于
char array1[...] = { ... };
char array2[...] = { ... };
char* pointer_to_array1 = array1;
char* pointer_to_array2 = array2;
swap(pointer_to_array1, pointer_to_array2);
// After call, pointer_to_array1 will point to the first element of array2
// and pointer_to_array2 will point to the first element of array1
关于c++ - C++ 和数组中的通用交换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477753/