如何解决为什么将一个分配给另一个的方法与在 C++ 中分配两个单独的变量不同?
所以在图片中,它说问题在于数组的起始地址,因为我们无法更改它。但为什么这仅适用于数组。 int x = 1;
我们可以轻松地说 int y = x;
并且它会起作用。这不会改变变量的内存地址吗?
解决方法
[tl;dr] newValues = oldValues;
是非法的(“不起作用”)的第一个也是唯一的原因是 C++ 标准禁止它。 C++ 中未定义、支持或允许数组赋值,因此任何此类语句都是无效代码。使用内存地址或其他推测来“解释”它的任何其他尝试只会混淆一个简单的事实,即语言的定义决定了语言中什么是合法的,什么是不合法的。
以下内容引用自已发布的“教科书”摘录,我发现它既错误又被误导,因为它看起来像是对 C++ 基础知识的介绍。
不带括号和下标的数组名代表数组的起始内存地址
错了。该名称代表它所表示的变量,它具有 array
类型。虽然在某些上下文中数组可以衰减为指针(“起始内存地址),但数组名称与它的相同肯定是不正确的。起始地址。例如,sizeof oldValues
和 typeid(oldValues)
都是有效的表达式,如果将 oldValues
替换为其内存地址,则含义将大不相同。
该语句将不起作用,因为您无法更改数组的起始内存地址
“不会工作”的说法是正确的,但给出的原因仍然是错误的。没有赋值改变它左边的地址,它只改变它的值。数组赋值不起作用,因为语言没有定义它,没有其他原因。例如,考虑以下内容。
int a[4],b[4];
a = b; // error,array assignment not allowed
struct { int n[4]; } c,d;
c = d; // ok,using default copy assignment
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。