标签: post-increment

什么更有效,i ++或++ i?

确切重复:在C++中i ++和++ i之间是否存在性能差异?
确切重复:循环中i ++和++ i之间的区别?


什么更有效,i ++或++ i?

我只在Java和C/C++中使用过这个,但我真的要求实现它的所有语言.

在大学里我有一位教授告诉我们++我更有效率,但已经有几年了,我想从Stack Overflow社区获得意见.

c++ java performance pre-increment post-increment

15
推荐指数
4
解决办法
2万
查看次数

Java增量和赋值运算符

我对post ++和pre ++运算符感到困惑,例如在下面的代码中

int x = 10;
x = x++;

sysout(x);
Run Code Online (Sandbox Code Playgroud)

会打印10?

它打印10,但我预计它应该打印11

但是当我这样做的时候

x = ++x; instead of x = x++;
Run Code Online (Sandbox Code Playgroud)

它将按照我的预期打印11个,那么为什么x = x ++; 不改变x的值?

java increment pre-increment post-increment

14
推荐指数
2
解决办法
6577
查看次数

为什么(++ i)++有效时“ ++ i ++”无效?

让我们考虑以下代码:

int main() {
    int i = 2;
    int b = ++i++;
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误:

<source>: In function 'int main()':

<source>:3:16: error: lvalue required as increment operand

    3 |     int b = ++i++;

      |                ^~
Run Code Online (Sandbox Code Playgroud)

这对我来说听起来很公平。后缀增量的优先级高于前缀增量的优先级,因此代码被解析为int b = ++(i++);i是右值。因此,错误。

现在让我们考虑带有括号的此变体,以覆盖默认优先级:

int main() {
    int i = 2;
    int b = (++i)++;
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

该代码将编译并返回3。对我来说,这听起来很公平,但似乎与第一个代码矛盾。

问题:为什么(++i)lvaluei不成?

谢谢!

更新:上面显示的错误消息来自gcc(x86-64 9.2)。这是确切的渲染: gcc错误

Clang x86-64 9.0.0有一个完全不同的消息: clang错误

<source>:3:13: error: expression is …
Run Code Online (Sandbox Code Playgroud)

c++ operators lvalue pre-increment post-increment

14
推荐指数
1
解决办法
259
查看次数

post increment operator java

我无法通过joshua bloch的"java puzzlers"来制作以下代码的正面或反面.

public class Test22{
 public static void main(String args[]){
  int j=0;
  for(int i=0;i<100;i++){ 
    j=j++;
  }
  System.out.println(j); //prints 0

  int a=0,b=0;
  a=b++;
  System.out.println(a);
  System.out.println(b); //prints 1


 }
}
Run Code Online (Sandbox Code Playgroud)

我不能得到j打印0的部分.据作者说,

j=j++
Run Code Online (Sandbox Code Playgroud)

类似于

temp=j;
j=j+1;
j=temp;
Run Code Online (Sandbox Code Playgroud)

a=b++
Run Code Online (Sandbox Code Playgroud)

制作b 1.所以它应该像这样评估,

a=b
b=b+1
Run Code Online (Sandbox Code Playgroud)

遵循相同的逻辑,不应该

j=j++
Run Code Online (Sandbox Code Playgroud)

被评估为,

j=j
j=j+1
Run Code Online (Sandbox Code Playgroud)

这里的温度在哪里?任何解释都将非常感激."我对此深有所怀疑.;)>>提前致谢.

java post-increment

13
推荐指数
3
解决办法
7322
查看次数

Java:pre-postfix运算符优先级

关于Java中的运算符优先级,我有两个类似的问题.

第一:

int X = 10;
System.out.println(X++ * ++X * X++); //it prints 1440 
Run Code Online (Sandbox Code Playgroud)

根据Oracle教程:
postfix(expr ++,expr--)运算符的优先级高于prefix(++ expr, - expr)

所以,我想评估顺序:

1) first postfix operator: X++ 
   1.a) X++ "replaced" by 10
   1.b) X incremented by one: 10+1=11
   At this step it should look like:  System.out.println(10 * ++X * X++), X = 11;

2) second POSTfix operator: X++ 
   2.a) X++ "replaced" by 11
   2.b) X incremented by one: 11+1=12
   At this step it should look like:  System.out.println(10 * ++X …
Run Code Online (Sandbox Code Playgroud)

java operator-precedence pre-increment post-increment

13
推荐指数
1
解决办法
2891
查看次数

C编程++运算符

为什么这段代码总能产生x=2

unsigned int x = 0;
x++ || x++ || x++ || x++ || ........;
printf("%d\n",x);
Run Code Online (Sandbox Code Playgroud)

c post-increment

12
推荐指数
4
解决办法
837
查看次数

*it ++如何对输出迭代器有效?

在示例代码中,我经常看到代码,例如*it++输出迭代器.表达式*it++复制it,递增it,然后返回最终解除引用的副本.据我了解,制作输出迭代器的副本会使源无效.但是it,在创建副本之后执行的增量将是非法的,对吧?我对输出迭代器的理解有缺陷吗?

c++ iterator stl post-increment

12
推荐指数
2
解决办法
2532
查看次数

为什么后期增量适用于包装类

我正在对一些代码进行审查,并且遇到了一个有人在增加一个成员变量的实例,该成员变量是一个围绕Integer的包装类.我亲自尝试过,真的很惊讶它有效.

Integer x = 0; 
System.out.print(x++ + ", ");
System.out.print(x);
Run Code Online (Sandbox Code Playgroud)

这打印出来0, 1,不像0, 0 我预期的那样.我查看了语言规范,找不到任何涉及此内容的内容.任何人都可以向我解释为什么它可以工作,如果它在多个平台上是安全的?我原本以为这会分解成

Integer x = 0;
int temp1 = x.intValue();
int temp2 = temp1 + 1;
System.out.println(temp1);
temp1 = temp2;
System.out.println(x.intValue());
Run Code Online (Sandbox Code Playgroud)

但显然规范中有些东西会在x = temp1;最后一行之前添加

java immutability post-increment

12
推荐指数
1
解决办法
3174
查看次数

函数参数中预增量和后增量的运算顺序?

我有一些C代码:

main()
{
    int a=1;
    void xyz(int,int);

    xyz(++a,a++);     //which Unary Operator is executed first, ++a or a++?

    printf("%d",a);
}
void xyz(int x,int y)
{
    printf("\n%d %d",x,y);
}
Run Code Online (Sandbox Code Playgroud)

该函数xyz有两个传入的参数,++aa++.有人可以解释操作顺序来解释结果吗?

上面的代码根据使用的编译器打印"3 13"或"2 23".

c pre-increment post-increment

11
推荐指数
2
解决办法
2万
查看次数

给定表达式中的运算符优先级

表达式1:*p++;where p是指向整数的指针.

p将首先递增,然后由于关联性(从右到左)获取它指向的值.这样对吗?

表达式2:a=*p++;where p是指向整数的指针.

首先取值,p然后分配给a第一个然后p由于后增量而增加.这样对吗?

c pointers operator-precedence post-increment

11
推荐指数
3
解决办法
1297
查看次数