Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++算子前后增量_C++ - Fatal编程技术网

C++算子前后增量

C++算子前后增量,c++,C++,我不理解此代码示例的前/后递增: int1 = 14; int2 = ++int1; // Assert: int1 == 15 && int2 == 15 在这个递增前的示例中,为什么int1==15?为什么int1是递增的,而不仅仅是int2 然后我们有: int1 = 14; int2 = int1++; // Assert: int1 == 15 && int2 == 14 在这个递增后的示例中,为什么int2==14?为什么int2不递增而int1递

我不理解此代码示例的前/后递增:

int1 = 14;
int2 = ++int1;
// Assert: int1 == 15 && int2 == 15
在这个递增前的示例中,为什么int1==15?为什么int1是递增的,而不仅仅是int2

然后我们有:

int1 = 14;
int2 = int1++;
// Assert: int1 == 15 && int2 == 14

在这个递增后的示例中,为什么int2==14?为什么int2不递增而int1递增?

在递增前的示例中,int1递增,然后分配给int2。对于递增后的示例,int1被分配给int2,然后int2被递增。

对于递增前的示例,int1被递增,然后分配给int2。在递增后的示例中,int1被分配给int2,然后int2递增

int1 = 14;
int2 = ++int1;
相当于

int1 = 14;
int1 = int1 + 1;
int2 = int1;
int1 = 14;
int2 = int1;
int1 = int1 + 1;

相当于

int1 = 14;
int1 = int1 + 1;
int2 = int1;
int1 = 14;
int2 = int1;
int1 = int1 + 1;
相当于

int1 = 14;
int1 = int1 + 1;
int2 = int1;
int1 = 14;
int2 = int1;
int1 = int1 + 1;

相当于

int1 = 14;
int1 = int1 + 1;
int2 = int1;
int1 = 14;
int2 = int1;
int1 = int1 + 1;
++int1和int1++都递增int1,因为递增运算符就是这样做的:它们递增操作数

int2在第一个示例中为15,在第二个示例中为14,这是因为递增前运算符和递增后运算符的返回值不同:递增后运算符使操作数递增,但返回操作数递增前的值。pre increment运算符返回操作数的新值。

++int1和int1++都递增int1,因为递增运算符就是这样做的:它们递增操作数


int2在第一个示例中为15,在第二个示例中为14,这是因为递增前运算符和递增后运算符的返回值不同:递增后运算符使操作数递增,但返回操作数递增前的值。预递增运算符返回操作数的新值。

预递增运算符递增其操作数并返回递增值:

int i = 0;
++i;  // now i is 1, and the returned 1 is discarded
int j = ++i;  // and now i is 2, and the returned 2 is stored in j
postincrement递增其操作数并返回递增前的值:

int i = 0;
i++;  // now i is 1, and the returned 0 is discarded
int j = i++;  // now i is 2, and the returned 1 is stored in j

preincrement运算符递增其操作数并返回递增的值:

int i = 0;
++i;  // now i is 1, and the returned 1 is discarded
int j = ++i;  // and now i is 2, and the returned 2 is stored in j
postincrement递增其操作数并返回递增前的值:

int i = 0;
i++;  // now i is 1, and the returned 0 is discarded
int j = i++;  // now i is 2, and the returned 1 is stored in j

通过在变量之前或之后使用++,不管怎样,都会增加该变量。将其放在操作之前或之后的更改是操作返回的内容

int1的值

int1=1; int2=int++//返回int1值[1],并将int1增加1[2]
int3=++int//将int1[2]递增1[3],然后使用++在变量之前或之后返回int1[3]

,无论您是否递增该变量。将其放在操作之前或之后的更改是操作返回的内容

int1的值

int1=1; int2=int++//返回int1值[1],并将int1增加1[2]
int3=++int//将int1[2]增加1[3],然后返回int1[3]

您的问题很难回答,因为无法确定它们是如何产生的

在第一个问题中,您会问为什么int1会递增。唯一可能的答案是:因为你增加了它。您对其应用了增量运算符。当您对一个变量应用递增运算符时,不管是前缀还是后缀,变量都会递增。句号

现在,在两个示例中,都将增量运算符应用于int1。现在你在问为什么它会增加?对不起,这样的问题根本没有意义。如果您不知道递增运算符递增变量,在提问之前,您需要先阅读一些基础书籍

至于国际2。。。您从未将递增运算符应用于int2,因此它将永远不会递增。从不在您的示例中没有增加int2的地方


在这两种情况下,int2都被简单地赋值。该值是应用于int1的增量运算符的结果。在这种情况下,您需要知道的是,后缀增量返回其操作数的旧值,因此int1++计算为14,而前缀增量返回其操作数的新值,因此,++int1计算为15。这就是在这两种情况下进入int2的原因。

您的问题很难回答,因为无法找出它们是如何产生的

在第一个问题中,您会问为什么int1会递增。唯一可能的答案是:因为你增加了它。您对其应用了增量运算符。当您对一个变量应用递增运算符时,不管是前缀还是后缀,变量都会递增。句号

现在,在两个示例中,都将增量运算符应用于int1。现在你在问为什么它会增加?对不起,这样的问题根本没有意义。如果您不知道递增运算符递增变量,在提问之前,您需要先阅读一些基础书籍

至于国际2。。。您从未将递增运算符应用于int2,因此它将永远不会递增。从不在您的示例中没有int2是i的地方 增加


在这两种情况下,int2都被简单地赋值。该值是应用于int1的增量运算符的结果。在这种情况下,您需要知道的是,后缀增量返回其操作数的旧值,因此int1++计算为14,而前缀增量返回其操作数的新值,因此,++int1计算为15。这就是在这两种情况下int2的内容。

谢谢你的答案表达得很好,我理解。可能值得注意的是,这是一个非常松散的等价关系:它正确地解释了数值结果,但它在排序的热力学中并不等价。++的求值过程不包含序列点,而这些等效版本在过程中引入了一个序列点,从而提供了实际上不存在的额外保证。谢谢你的答案表达得很好,我理解。可能值得注意的是,这是一个非常松散的等价物:它正确地解释了数值结果,但它在序列的therms中并不等价。++的求值过程不包含序列点,而这些等价版本在过程中引入了一个序列点,因此提供了实际上不存在的额外保证。