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

标签 c++ arrays parameter-passing swap

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/

相关文章:

C++ 错误字符分配

c++ - 多个子目录中目标文件的通用 makefile 目标

Javascript 矩阵赋值在填充情况下的行为与使用循环创建矩阵的情况不同。为什么?

Javascript Array Map 意外更改了原始数组值

具有非原始类型的 C++ 按值传递?

xml - 使用参数值,如 xslt 中的 select

r - 如何将 ggplot 对象向量传递给 grid.arrange 函数?

c++ - 链接器命令 - 没有为第 3 方库制定目标的规则

c++ - 非模板函数中的 std::forward

javascript - 如果值在数组中,则生成新的随机值