C++;多值初始化 我正在用C++编写一个程序。当我将多个值赋给单个变量时,代码有问题。我对特定的逻辑感到困惑,因为代码中没有减量运算符,但当I分配多个值时,我并不完全理解其逻辑: int main() { int j = 1; int i = (j+2, j+3, j++); cout<<"value is "<<i; getch(); return 0; } intmain() { int j=1; inti=(j+2,j+3,j++); cout
变量j是后增量,因此j的当前值被放入i中,然后j被递增 您可以将其视为:C++;多值初始化 我正在用C++编写一个程序。当我将多个值赋给单个变量时,代码有问题。我对特定的逻辑感到困惑,因为代码中没有减量运算符,但当I分配多个值时,我并不完全理解其逻辑: int main() { int j = 1; int i = (j+2, j+3, j++); cout<<"value is "<<i; getch(); return 0; } intmain() { int j=1; inti=(j+2,j+3,j++); cout,c++,variable-assignment,assignment-operator,C++,Variable Assignment,Assignment Operator,变量j是后增量,因此j的当前值被放入i中,然后j被递增 您可以将其视为: int j=1; int temp = j + 2; int temp1 = j + 3; int i=j; j++; 变量temp和temp1实际上不存在并被丢弃。阅读: 逗号运算符,具有从左到右的关联性 由逗号分隔的值从左到右求值。左操作数为 始终进行评估,所有副作用都会在右前完成 计算操作数 表达方式: i = (j + 2, j + 3, j++); 效果相当于(因为对j+2和j+3的评估没有副作用): 因此j
int j=1;
int temp = j + 2;
int temp1 = j + 3;
int i=j;
j++;
变量temp
和temp1
实际上不存在并被丢弃。阅读:
逗号运算符,
具有从左到右的关联性
由逗号分隔的值从左到右求值。左操作数为
始终进行评估,所有副作用都会在右前完成
计算操作数
表达方式:
i = (j + 2, j + 3, j++);
效果相当于(因为对j+2
和j+3
的评估没有副作用):
因此j
的第一个值被分配给i
,即1,然后j
增加到2
这里在j++
之前对j+2
和j+3
进行了评估,但没有效果
重要的是要注意表达式中的括号()
优先于写入优先级,因此首先,
运算符在括号内求值,然后=
最后求值
要理解输出:,
的优先级低于=
。在表达式中,您必须使用括号覆盖优先级
编辑:根据评论:
假设表达式为:
int i = (j++, j+2, j+3);
在这个表达式中,j++
首先增加j
的值,因为++
操作到2
,然后j+2
求值,但是这个子表达式没有副作用,最后j+3
求值=5
,并且5
被分配到i
。因此,在e端为5
所以这里的inti=(j++,j+2,j+3);
并不等同于i=j+3
,因为j++
具有改变j
值的副作用
如果你有一个像a=(b,c,d)这样的表达式,那么在排序中
然后第一个表达式b
求值,然后表达式c
求值,然后表达式d
求值,因为的左写关联性,
运算符然后表达式d
的最终值在写入int i=(j+2,j+3,j++)时分配给变量a
;
,基本上就像你写的inti=j++;
这意味着:
1) 由于j
的值为1,i
将具有相同的值
2)之后,代码< > > <代码>将增加。
让我们考虑这些定义
int j=1;
int i=(j+2,j+3,j++);
(j+2,j+3,j++)是一个带有逗号运算符的表达式。其结果是最后一个子表达式。子表达式j+2和j+3既不影响j也不影响i。唯一影响j和i的子表达式是最后一个子表达式。它是j++。增量后运算符的值是增量前原始变量的值。因此,j++的值是1。我将l得到这个值。同时j将递增,得到值2。正如其他人所指出的,你不能做你想做的事情,逗号运算符正在发挥作用。非常清楚,这一行:
int i=(j+2,j+3,j++);
正在执行以下步骤:
计算j+2。计算结果为3,由于未分配给任何对象,因此被丢弃
评估j+3,参见步骤1
计算j++的值。这将增加j,其值变为2,但计算结果为旧值j,即1
步骤3的结果分配给i
这不是将多个值赋给一个变量,这是不可能的。您需要阅读有关的。Joachim的注释说明了一切。int i=(j++,j+2,j+3)但是当我们处理这个问题时,为什么我们的问题的答案变成了5。因为根据具体情况,答案应该是4logic@user3102208这相当于i=j+3
我已经读过了,但正如j=1和你所说的i=j+3;因此,根据这一点,我应该是4。但事实并非如此,而是5。@user3102208根据你的eexpressioninti=(j++,j+2,j+3);
(在第一个注释中)如果j=1
首先j++
增加到2
,那么由于i=j+3
,则i
将被删除5@user3102208读一下答案中的最后一句话,我想这会对你们有所帮助。inti=(j++,j+2,j+3)我明白你的意思,但为什么在这种情况下答案会变成5而不是4。因为j=1;然后是j++;然后是i=j+3;所以j=1,然后是j=2,然后是i=2+3;
int i=(j+2,j+3,j++);