为什么C++中不能将数组的内容拷贝给其他数组作为初始值,也不能用数组给其他数组赋值
0 前言
来自primer的3.5部分
以下写法是有问题的
int a[] = {0,1,2}
int a2[] = a; // 错误,不允许使用一个数组初始化另一个数组
a2 = a; // 错误:不能把一个数组赋值给另一个数组
有些编译器支持上面的操作,但是书上说这属于非标准功能,是编译器扩展
1 原因
C++中的数组是一种固定大小的容器,其大小在编译时必须是已知的,而且数组名会被转换成指向其首元素的指针。
- 大小问题:目标数组的大小必须与源数组的大小相同,否则就无法直接赋值。如果两数组大小不一样,那么就会出现数组越界或者数据丢失
- 类型问题:数组名会转换成指针,因此你不能简单地将一个指针赋值给另一个指针来复制数组的内容,如果是指针赋值,那么两个数组名就共享同一片内存,那么就不是我们想要的复制一个新数组了。
- 数组是非可复制的:C++中的数组是非可复制的,它们没有内置的复制构造函数或赋值操作符,因此无法直接进行数组之间的复制。