为什么C++中不能将数组的内容拷贝给其他数组作为初始值,也不能用数组给其他数组赋值

0 前言

来自primer的3.5部分

以下写法是有问题的

int a[] = {0,1,2}
int a2[] = a;    // 错误,不允许使用一个数组初始化另一个数组
a2 = a;        // 错误:不能把一个数组赋值给另一个数组

有些编译器支持上面的操作,但是书上说这属于非标准功能,是编译器扩展

1 原因

C++中的数组是一种固定大小的容器,其大小在编译时必须是已知的,而且数组名会被转换成指向其首元素的指针。

  1. 大小问题:目标数组的大小必须与源数组的大小相同,否则就无法直接赋值。如果两数组大小不一样,那么就会出现数组越界或者数据丢失
  2. 类型问题:数组名会转换成指针,因此你不能简单地将一个指针赋值给另一个指针来复制数组的内容,如果是指针赋值,那么两个数组名就共享同一片内存,那么就不是我们想要的复制一个新数组了。
  3. 数组是非可复制的:C++中的数组是非可复制的,它们没有内置的复制构造函数或赋值操作符,因此无法直接进行数组之间的复制。
posted @ 2024-04-09 10:25  wenli7363  阅读(79)  评论(0编辑  收藏  举报