标签: pre-increment

++ x比Java中的x ++更有效吗?

在编程类,教授教我们关于x++++x,其中x是一个整数.

他说,在方案中,我们可以只是把两种x++++x,++x是更有效的(一点,但还是在理论上,更高效尽管如此).

但我忘记了原因.有谁知道?这是Java.

java pre-increment post-increment

16
推荐指数
2
解决办法
1664
查看次数

什么更有效,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
查看次数

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代码:

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万
查看次数

i = ++ i和++ i之间的区别

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

是什么区别i = ++i;,并++i;在那里i与值的整数10

根据我的说法i,两个表达式完成后,两者都做同样的增量工作i =11.

c c++ operator-precedence pre-increment

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

Javascript中的预增量

我刚刚在Javascript中遇到了关于预增量的'功能'.在我使用的所有其他语言中,它就像我认为的那样.例如在C++中:

#include <iostream>

int main()
{
    int i = 0;

    i += ++i;

    std::cout << i << std::endl; // Outputs 2.
}
Run Code Online (Sandbox Code Playgroud)

因此,++i不会复制变量,因此输出为2.

在PHP中相同:

<?php

$i = 0;

$i += ++$i;

echo $i; // Outputs 2.

Run Code Online (Sandbox Code Playgroud)

但是,在Javascript中:

var i = 0;

i += ++i;

console.log(i); // Outputs 1.
Run Code Online (Sandbox Code Playgroud)

所以它看起来像在Javascript中,它复制i并且不引用变量.这是故意的,如果是,为什么?

javascript pre-increment

11
推荐指数
1
解决办法
2483
查看次数

递增struct成员

假设我有一个如下定义的结构

struct my_struct
{
     int num;
};
Run Code Online (Sandbox Code Playgroud)

....

这里我有一个指针my_struct,我想做一个增量num

void foo(struct my_struct* my_ptr)
{
     // increment num
     // method #1
     my_ptr->num++;

     // method #2
     ++(my_ptr->num);

     // method #3
     my_ptr->++num;

}
Run Code Online (Sandbox Code Playgroud)

这三种递增方式是否num做同样的事情?虽然我们正处于这种状态,但预增量是否比后增量更有效?

谢谢!

c struct increment pre-increment

10
推荐指数
1
解决办法
1万
查看次数

C语言有预增量和后增量的历史原因是什么?

(注意:我不是在询问预增量与后增量的定义,或者它们在C/C++中的使用方式.因此,我不认为这是一个重复的问题.)

C的开发人员(Dennis Ritchie等人)出于很好的理由创建了增量和减量运算符.我不明白为什么他们决定创造前后增量/减量的区别?

我的感觉是,当C开发时,这些运算符比今天更有用.大多数C/C++程序员使用其中一种,而来自其他语言的程序员今天发现这种区别奇怪且令人困惑(注意:这完全基于轶事证据).

他们为什么决定这样做,以及计算上发生了什么变化,这种区别今天没那么有用?

为了记录,可以在C++代码中看到两者之间的差异:

int x = 3;

cout << "x = 3; x++ == " << x++ << endl;
cout << "++x == " << ++x << endl;
cout << "x-- == " << x-- << endl;
cout << "--x == " << --x << endl;
Run Code Online (Sandbox Code Playgroud)

将作为输出

x++ == 3
++x == 5
x-- == 5
--x == 3
Run Code Online (Sandbox Code Playgroud)

c c++ pre-increment post-increment decrement

10
推荐指数
2
解决办法
1010
查看次数