c ++和数组中的通用交换函数

fad*_*mwo 3 c++ arrays swap parameter-passing

template <class T>
 void swap(T& a, T& b){
     T tmp = a; a = b; b = tmp;
}
Run Code Online (Sandbox Code Playgroud)

我正在读一本书,它告诉我上面的代码不适用于数组,除非我们重载'='运算符.我不明白为什么它不应该工作.我们是不是将指针切换到数组的第一个索引?

Som*_*ude 6

首先,如果您将数组作为参数传递,则类型T将被推断为数组类型,这会导致问题,因为您无法分配仅复制它们的数组.

然后你误以为你只能切换指针,这是无法做到的.如果你有两个指针,交换它们将工作正常,但你不能只是切换这样的数组.并且在调用中直接使用address-of运算符也不可能使用指向数组的指针,因为这将尝试将引用绑定到不可能的临时值.

使用您的函数"交换数组" 的唯一解决方案就像

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
Run Code Online (Sandbox Code Playgroud)