为什么将一个变量赋值给另一个变量的方法与在 C++ 中分配两个单独变量的方法不同?
why is the method of assigning one to another is different from assigning two individual variables in C++?
所以在图片中,它说问题出在数组的起始地址,因为我们无法更改它。但为什么这只适用于数组。 int x = 1;
我们可以很容易地说 int y = x;
并且它会起作用。这不也改变了变量的内存地址吗?
[tl;dr] newValues = oldValues;
非法的第一个也是唯一的原因(“ 不起作用”)是C++标准禁止的。 C++ 中未定义、不支持或不允许数组赋值,因此任何此类语句都是无效代码。任何其他尝试使用内存地址或其他推测来“解释”它,只会混淆一个简单的事实,即决定什么是合法的以及什么不是该语言的语言的定义。
以下内容摘自已发布的“教科书”摘录,我发现这些内容看起来是 C++ 基础知识的介绍,既错误又误导。
the name of an array without the brackets and subscript stands for the array's starting memory address
错了。该名称代表它表示的变量,它具有 array
类型。虽然在某些上下文中数组确实可以衰减为指针(“起始内存地址),但数组名称是[=32]肯定不是真的=]与其起始地址相同。例如,sizeof oldValues
和typeid(oldValues)
都是有效表达式,如果将oldValues
替换为其内存地址,则意义非常不同。
the statement will not work because you cannot change the starting memory address of an array
“不会起作用”的说法是正确的,但给出的理由还是错误的。没有赋值改变它左边的 address,它只改变它的值。数组赋值不起作用,因为语言没有定义它,没有其他原因。例如考虑以下内容。
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
所以在图片中,它说问题出在数组的起始地址,因为我们无法更改它。但为什么这只适用于数组。 int x = 1;
我们可以很容易地说 int y = x;
并且它会起作用。这不也改变了变量的内存地址吗?
[tl;dr] newValues = oldValues;
非法的第一个也是唯一的原因(“ 不起作用”)是C++标准禁止的。 C++ 中未定义、不支持或不允许数组赋值,因此任何此类语句都是无效代码。任何其他尝试使用内存地址或其他推测来“解释”它,只会混淆一个简单的事实,即决定什么是合法的以及什么不是该语言的语言的定义。
以下内容摘自已发布的“教科书”摘录,我发现这些内容看起来是 C++ 基础知识的介绍,既错误又误导。
the name of an array without the brackets and subscript stands for the array's starting memory address
错了。该名称代表它表示的变量,它具有 array
类型。虽然在某些上下文中数组确实可以衰减为指针(“起始内存地址),但数组名称是[=32]肯定不是真的=]与其起始地址相同。例如,sizeof oldValues
和typeid(oldValues)
都是有效表达式,如果将oldValues
替换为其内存地址,则意义非常不同。
the statement will not work because you cannot change the starting memory address of an array
“不会起作用”的说法是正确的,但给出的理由还是错误的。没有赋值改变它左边的 address,它只改变它的值。数组赋值不起作用,因为语言没有定义它,没有其他原因。例如考虑以下内容。
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