为什么C++中不能将数组的内容拷贝给其他数组作为初始值,也不能用数组给其他数组赋值
0 前言
来自primer的3.5部分
以下写法是有问题的
int a[] = {0,1,2} int a2[] = a; // 错误,不允许使用一个数组初始化另一个数组 a2 = a; // 错误:不能把一个数组赋值给另一个数组
有些编译器支持上面的操作,但是书上说这属于非标准功能,是编译器扩展
1 原因
C++中的数组是一种固定大小的容器,其大小在编译时必须是已知的,而且数组名会被转换成指向其首元素的指针。
- 大小问题:目标数组的大小必须与源数组的大小相同,否则就无法直接赋值。如果两数组大小不一样,那么就会出现数组越界或者数据丢失
- 类型问题:数组名会转换成指针,因此你不能简单地将一个指针赋值给另一个指针来复制数组的内容,如果是指针赋值,那么两个数组名就共享同一片内存,那么就不是我们想要的复制一个新数组了。
- 数组是非可复制的:C++中的数组是非可复制的,它们没有内置的复制构造函数或赋值操作符,因此无法直接进行数组之间的复制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步