问题标签 [post-increment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3728 浏览

c++ - postincrement i++ 什么时候执行?

可能重复:
未定义的行为和序列点

在机器代码级别的 C++ 中,postincrement++ 运算符何时执行?

优先级表表明 postfix++ 运算符是第 2 级:这意味着在

后缀 ++ 的执行。

但是,这行的逻辑操作似乎是先发生加法(0+0),但这是怎么发生的呢?

我想象的如下:

因此,另一种选择是尽管 x++ 在 x + x 的优先级表上更高,但由于 x++ 生成的代码被插入到加法运算的下方

第二个选项似乎更有意义,但我对这里的操作顺序感兴趣。具体来说,x 什么时候改变

0 投票
3 回答
224 浏览

javascript - 闭包编译器 - a++ >= 3 可以变成 ++a > 3 吗?

我承认我问了一个问题,为什么 Closure Compiler 不缩短某些乍一看似乎可以缩短的代码几天前,但这个原因在这种情况下不适用,我不确定为什么它没有缩短这里。

我的代码是:

现在有前置增量和后置增量。不同之处在于返回值 -a++返回a然后递增它,首先递增然后返回它。++aa

这归结为我的代码可以缩短为(忽略空格删除):

然而,闭包编译器似乎并没有改变(或识别)这一点。

++a >因此,我的问题是:使用而不是会产生什么副作用a++ >=

0 投票
2 回答
315 浏览

c++ - 重载后自增运算符导致参数值为 0

可能重复:
是否允许在后缀运算符 ++ 中命名参数?

我创建了一个对象来保存在内部保持当前位置的对象列表,所以我认为这是一个重载前置和后置增量运算符的好地方,它可以通过边界检查有效地增加这个内部位置。

我注意到的是,当您调用++对象时,参数是0.

测试代码:

这返回0 0 1 10。据我了解,这是正常行为。所以,它让我重新思考operator++应该如何工作。以前,如果边界检查通过,我只是调用++我的内部位置变量。但无论输入参数是什么,这都会产生递增 1 的影响。接下来,我虽然使用+=using 参数n作为右手边,但正如您会注意到的那样,只需++不使用运算符(按照惯例)调用,就会给出零并且位置不会增加。

基本上,这是我应该担心的事情吗?如果是这样,我如何检测用户是否真的想要 0,或者如果默认行为 ( a++) 是有意的,我应该增加 1?

0 投票
4 回答
1228 浏览

c - C:指针混淆

我知道这是基本内容的一部分,但我被困住了:-(有人可以帮我吗?

方案一:

为什么输出错误?需要左值吗?

方案二:

为什么输出是空字符串?如果我颠倒递增的顺序,即:while(++*p2=++*p1);,为什么会出现左值错误?

0 投票
8 回答
106995 浏览

java - ++Var和Var++的区别

在编程中,特别是在 Java 中,有什么区别:

这会对 for 循环产生什么影响?

例如

0 投票
1 回答
291 浏览

c++ - 是否会针对 STL 迭代器优化后缀 ++/-- 运算符的低效率?

我知道增量/减量运算符的后缀版本通常会由编译器针对内置类型进行优化(即不会进行复制),但是对于iterators 是这种情况吗?

它们本质上只是重载的运算符,并且可以通过多种方式实现,但是由于它们的行为是严格定义的,它们可以被优化吗?如果是这样,它们是由任何/许多编译器来实现的吗?

0 投票
1 回答
941 浏览

c++ - 后缀运算符重载顺序

可能重复:
未定义的行为和序列点

重载后缀运算符时,我无法理解操作的顺序。让我们看看下面的两个小例子:

出现了两种截然不同的行为。输出如下:

不同的行为,你看。这是我的重载运算符方法的概要。

好吧。前缀是有道理的。您可以增加所需的任何内容,然后返回相同的对象,现在已修改,以防分配。但是后缀是让我绊倒的地方。它应该分配,然后递增。在这里,我们是自我分配的。所以使用内置的整数类型,这是有道理的。我将i' 的值分配给自身,然后i递增。很公平。但是,假设MyClass是对 int 的重新创建。它从 0 开始,前缀递增,然后变为 1。然后是关键行。 myObject = myObject++. 这和myObject = myObject.operator++(int postfixFlag). 它被调用。 myTemp用值 1 初始化。它递增到 2。然后我们返回 temp。如果我们要分配给另一个对象,那就行得通。但在这里我是自分配的,所以在增加到 2 之后,myObject设置为等于返回的用初始值初始化的临时对象,我们又回到了 1!那讲得通。但这是一种根本不同的行为。

我该如何解决它?int 是如何做到的?这个方法一般是怎么写的?您对与此相关的 C++ 行为和设计有什么意见吗?等等我现在有点困惑,因为书籍和在线示例似乎总是使用上述方法的变体。

感谢您的阅读,任何输入将不胜感激!

0 投票
6 回答
1224 浏览

c# - C# 中的奇怪增量行为

注意:请注意,下面的代码本质上是无意义的,仅用于说明目的。

基于这样一个事实,即在赋值给左侧变量之前必须始终评估赋值的右侧,并且始终在评估后立即执行诸如++和之类的递增操作--,我不希望出现以下情况工作代码:

相反,我希望newArray1[0]被分配到newArray2[1], newArray1[1]tonewArray[2]等等直到抛出System.IndexOutOfBoundsException. 相反,令我惊讶的是,引发异常的版本是

因为,在我的理解中,编译器首先评估 RHS,将其分配给 LHS,然后才递增,这对我来说是一个意想不到的行为。或者它真的是预期的,我显然错过了什么?

0 投票
5 回答
5891 浏览

c++ - 单个语句中的多个增量运算符

可能重复:
未定义的行为和序列点

请解释以下语句的行为

它将如何计算?

0 投票
4 回答
152 浏览

c++ - 在 C++ 中循环字符时出现意外结果

我正在使用“使用 C++ 的编程原理和实践”这本书来学习编程,其中一个练习是使用 while 循环遍历字符 az。

现在,我以前用 C++ 和其他语言编程过,所以我决定尝试使用尽可能少的行(同时仍然使用 while 循环)。然而,这伴随着我的输出成本有点混乱。

代码:

输出:

现在我确实意识到这可以用 for 循环代替,我也这样做了(它有效)。但我仍然不明白这段代码有什么问题,这真的让我很烦。

看起来好像我已经告诉它输出“ch+1”,因为它在应该打印“a”的地方打印出“b”。直到 ch 的整数值被放入输出流(后增量)之后才完成增量。即使我早些时候增加了它,至少打印的字符和它们的整数值应该对应。

关于为什么此代码不起作用的任何想法?