gpt4 book ai didi

c++ - 为什么我们可以直接拷贝指针,而不能在c++中直接拷贝数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:43 27 4
gpt4 key购买 nike

定理说我们不能将一个数组初始化为另一个数组的拷贝。但是我们可以将指针初始化为指向另一个数组第一个元素的指针的拷贝:

int a[] = {0, 1, 2}; 
int a2[] = a;       //error
int *a3 = a;        //OK

为什么 int a2[] = a; 是错误的?

最佳答案

在 C++ 中不能将数组分配给另一个数组对象或从另一个数组对象初始化数组,因为它们不能在 C 中,而且由于历史原因它们不能在 C 中不再真正相关。

在非常早期的 proto-C 中,会有一些混淆是否像 int a[] = {0}; 这样的赋值? int b[] = {0}; a = b; 应该将数组 b 的内容复制到 a 中,或者重新设置名称 a 以引用 b。与初始化类似,a 应该是 b 的拷贝还是别名。这种歧义已经存在了 40 年:很快就清楚了,如果允许它,那么在 C(和 C++)中的合理含义是它应该复制,但 C 中的数组是从未成为“适当的”值类型。

没有技术原因说明它不可能,例如,您可以分配一个以数组作为数据成员的结构类型。该标准根本没有将您的代码定义为正确的 C++。

指针的行为与此没有直接关系。初始化指针(指向数组的第一个元素)与初始化数组及其内容是不同的操作,并且该语言在 RHS 上允许不同的操作。

关于c++ - 为什么我们可以直接拷贝指针,而不能在c++中直接拷贝数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12896727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com