问题标签 [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.
c++ - postincrement i++ 什么时候执行?
可能重复:
未定义的行为和序列点
在机器代码级别的 C++ 中,postincrement++ 运算符何时执行?
优先级表表明 postfix++ 运算符是第 2 级:这意味着在
后缀 ++ 的先执行。
但是,这行的逻辑操作似乎是先发生加法(0+0),但这是怎么发生的呢?
我想象的如下:
因此,另一种选择是尽管 x++ 在 x + x 的优先级表上更高,但由于 x++ 生成的代码被插入到加法运算的下方
第二个选项似乎更有意义,但我对这里的操作顺序感兴趣。具体来说,x 什么时候改变?
javascript - 闭包编译器 - a++ >= 3 可以变成 ++a > 3 吗?
我承认我问了一个问题,为什么 Closure Compiler 不缩短某些乍一看似乎可以缩短的代码几天前,但这个原因在这种情况下不适用,我不确定为什么它没有缩短这里。
我的代码是:
现在有前置增量和后置增量。不同之处在于返回值 -a++
返回a
然后递增它,首先递增然后返回它。++a
a
这归结为我的代码可以缩短为(忽略空格删除):
然而,闭包编译器似乎并没有改变(或识别)这一点。
++a >
因此,我的问题是:使用而不是会产生什么副作用a++ >=
?
c++ - 重载后自增运算符导致参数值为 0
可能重复:
是否允许在后缀运算符 ++ 中命名参数?
我创建了一个对象来保存在内部保持当前位置的对象列表,所以我认为这是一个重载前置和后置增量运算符的好地方,它可以通过边界检查有效地增加这个内部位置。
我注意到的是,当您调用++
对象时,参数是0
.
测试代码:
这返回0 0 1 10
。据我了解,这是正常行为。所以,它让我重新思考operator++
应该如何工作。以前,如果边界检查通过,我只是调用++
我的内部位置变量。但无论输入参数是什么,这都会产生递增 1 的影响。接下来,我虽然使用+=
using 参数n
作为右手边,但正如您会注意到的那样,只需++
不使用运算符(按照惯例)调用,就会给出零并且位置不会增加。
基本上,这是我应该担心的事情吗?如果是这样,我如何检测用户是否真的想要 0,或者如果默认行为 ( a++
) 是有意的,我应该增加 1?
c - C:指针混淆
我知道这是基本内容的一部分,但我被困住了:-(有人可以帮我吗?
方案一:
为什么输出错误?需要左值吗?
方案二:
为什么输出是空字符串?如果我颠倒递增的顺序,即:while(++*p2=++*p1);
,为什么会出现左值错误?
java - ++Var和Var++的区别
在编程中,特别是在 Java 中,有什么区别:
和
这会对 for 循环产生什么影响?
例如
c++ - 是否会针对 STL 迭代器优化后缀 ++/-- 运算符的低效率?
我知道增量/减量运算符的后缀版本通常会由编译器针对内置类型进行优化(即不会进行复制),但是对于iterator
s 是这种情况吗?
它们本质上只是重载的运算符,并且可以通过多种方式实现,但是由于它们的行为是严格定义的,它们可以被优化吗?如果是这样,它们是由任何/许多编译器来实现的吗?
c++ - 后缀运算符重载顺序
可能重复:
未定义的行为和序列点
重载后缀运算符时,我无法理解操作的顺序。让我们看看下面的两个小例子:
出现了两种截然不同的行为。输出如下:
不同的行为,你看。这是我的重载运算符方法的概要。
好吧。前缀是有道理的。您可以增加所需的任何内容,然后返回相同的对象,现在已修改,以防分配。但是后缀是让我绊倒的地方。它应该分配,然后递增。在这里,我们是自我分配的。所以使用内置的整数类型,这是有道理的。我将i
' 的值分配给自身,然后i
递增。很公平。但是,假设MyClass
是对 int 的重新创建。它从 0 开始,前缀递增,然后变为 1。然后是关键行。 myObject = myObject++
. 这和myObject = myObject.operator++(int postfixFlag)
. 它被调用。 myTemp
用值 1 初始化。它递增到 2。然后我们返回 temp。如果我们要分配给另一个对象,那就行得通。但在这里我是自分配的,所以在增加到 2 之后,myObject
设置为等于返回的用初始值初始化的临时对象,我们又回到了 1!那讲得通。但这是一种根本不同的行为。
我该如何解决它?int 是如何做到的?这个方法一般是怎么写的?您对与此相关的 C++ 行为和设计有什么意见吗?等等我现在有点困惑,因为书籍和在线示例似乎总是使用上述方法的变体。
感谢您的阅读,任何输入将不胜感激!
c# - C# 中的奇怪增量行为
注意:请注意,下面的代码本质上是无意义的,仅用于说明目的。
基于这样一个事实,即在赋值给左侧变量之前必须始终评估赋值的右侧,并且始终在评估后立即执行诸如++
和之类的递增操作--
,我不希望出现以下情况工作代码:
相反,我希望newArray1[0]
被分配到newArray2[1]
, newArray1[1]
tonewArray[2]
等等直到抛出System.IndexOutOfBoundsException
. 相反,令我惊讶的是,引发异常的版本是
因为,在我的理解中,编译器首先评估 RHS,将其分配给 LHS,然后才递增,这对我来说是一个意想不到的行为。或者它真的是预期的,我显然错过了什么?
c++ - 在 C++ 中循环字符时出现意外结果
我正在使用“使用 C++ 的编程原理和实践”这本书来学习编程,其中一个练习是使用 while 循环遍历字符 az。
现在,我以前用 C++ 和其他语言编程过,所以我决定尝试使用尽可能少的行(同时仍然使用 while 循环)。然而,这伴随着我的输出成本有点混乱。
代码:
输出:
现在我确实意识到这可以用 for 循环代替,我也这样做了(它有效)。但我仍然不明白这段代码有什么问题,这真的让我很烦。
看起来好像我已经告诉它输出“ch+1”,因为它在应该打印“a”的地方打印出“b”。直到 ch 的整数值被放入输出流(后增量)之后才完成增量。即使我早些时候增加了它,至少打印的字符和它们的整数值应该对应。
关于为什么此代码不起作用的任何想法?