标签: pre-increment

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

表达式评估顺序在C++和Java之间有何不同?

我试图理解这个页面上的例子,让我的大脑皱起了眉头:http: //answers.yahoo.com/question/index?qid = 200991103170907AAxXYG9

更具体地说这段代码:

int j = 4;
cout << j++ << j << ++j << endl;
Run Code Online (Sandbox Code Playgroud)

给出一个输出:566

现在,如果从右到左计算表达式,这对我来说是有意义的,但是在Java中有类似的表达式:

int j = 4;
System.out.print("" + (j++) + (j) + (++j));
Run Code Online (Sandbox Code Playgroud)

给出输出:456

这更直观,因为这表明它是从左到右进行评估的.在不同的网站上研究这个问题,似乎在C++中,编译器之间的行为有所不同,但我仍然不相信我理解.Java和C++之间评估差异的解释是什么?谢谢你.

c++ java operator-precedence pre-increment post-increment

9
推荐指数
2
解决办法
576
查看次数

JavaScript中的i ++和++ i之间是否存在性能差异?

我读过C中的i ++和++ i之间有性能差异吗?:

如果不使用结果值,i ++和++ i之间是否存在性能差异?

JavaScript的答案是什么?

例如,以下哪项更好?

1)

for(var i=0;i<max;i++){
    //code
}
Run Code Online (Sandbox Code Playgroud)

2)

for(var i=0;i<max;++i){
    //code
}
Run Code Online (Sandbox Code Playgroud)

javascript performance operators pre-increment post-increment

8
推荐指数
1
解决办法
2615
查看次数

echo ++ $ a + $ a ++的输出应该是多少

在PHP手册,运算符优先级部分,有这个例子:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
Run Code Online (Sandbox Code Playgroud)

我理解行为是未定义的,原因如下:

由于x + y = y + x解释器可以以任何顺序自由地评估xy添加,以便优化速度和/或存储器.我在查看本文中的C代码示例后得出结论.

我的问题是上面提到的PHP代码的输出应该是4表达式和子表达式的评估方式:

  • op1 = ++ $ a => $ a = 2,op1 = 2; op2 = $ a ++ => op2 = 2,$ a = 3; 2 + 2 = 4
  • op1 = $ a ++ => op1 = …

php operator-precedence pre-increment post-increment

8
推荐指数
1
解决办法
2878
查看次数

i ++与++ i在JavaScript for循环中

由于JSLint,我几乎总是使用i += 1增加JavaScript for循环,但对于快速和脏脚本,我使用i++.
但是,我在其他人的代码中看到了很多for循环,在这些代码中,他们i通过++i代替来增加.

据我所知,i++和之间没有区别++i,而且jsPref在性能上没有差别.
因此,我想知道做的惯例++i来自哪里以及为什么人们倾向于这样做.

有谁知道为什么很多JS编码器往往喜欢++ii++一个递增计数器循环什么时候?
谢谢.

javascript for-loop pre-increment post-increment

8
推荐指数
3
解决办法
4153
查看次数

对变量的赋值没有效果?

当我这样做:count = ++ count; 为什么我会收到警告 - 对变量计数的赋值没有效果?这意味着计数递增,然后分配给自己或其他东西?它和++ count一样吗?count = count ++中会发生什么??为什么我没有收到警告呢?

java compiler-warnings pre-increment post-increment

7
推荐指数
1
解决办法
6174
查看次数

为什么后增量需要复制而预增量不需要

我知道这个问题已经讨论了好几次了,但我找不到一个解释为什么在后增量操作时需要复制的帖子.

引用stackoverflow回复:

int j = i++; // j will contain i, i will be incremented.
int j = ++i; // i will be incremented, and j will contain i+1.
Run Code Online (Sandbox Code Playgroud)

当考虑后/前增量的定义时,这是完全有意义的.很多时候,在比较前/后增量的性能时,可以说后增量需要复制,增加它并返回副本,而预增量只增加值而不创建副本.

虽然已经在数十篇帖子中对性能进行了比较,但我真的找不到为什么在后增量的情况下必须制作副本的任何解释.为什么不返回旧值,然后将变量的值增加1(或者操作符重载方式),而不是创建新对象并返回该对象.

c++ increment pre-increment post-increment

7
推荐指数
2
解决办法
1372
查看次数

数组内的增量运算符

我有一个C程序,它是使用数组的队列操作。在该程序中,它们在数组内增加一个变量。我不明白那是怎么回事。因此,请解释以下操作:

array[++i];
array[i++];
Run Code Online (Sandbox Code Playgroud)

c c++ arrays pre-increment post-increment

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

C和Java中PreIncrement和PostIncrement运算符的行为

我在Visual C++和Java中运行以下程序:

Visual C++

void main()
{
    int i = 1, j;
    j = i++ + i++ + ++i;
    printf("%d\n",j);
}
Run Code Online (Sandbox Code Playgroud)

输出:

6
Run Code Online (Sandbox Code Playgroud)

Java的:

public class Increment {
    public static void main(String[] args) {
        int i = 1, j;
        j = i++ + i++ + ++i;
        System.out.println(j);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

7
Run Code Online (Sandbox Code Playgroud)

为什么这两种语言的输出不同?语言对于前后增量运算符的处理方式有何不同?

c java pre-increment post-increment

6
推荐指数
1
解决办法
731
查看次数

在for循环中,根据迭代总量,在循环控制变量的前/后递增之间是否存在差异?

当我用下面的代码编译并运行代码counter++++counter替换时x,输出是相同的; 在这两种情况下,数字1 - 10:

for (int counter = 1; counter < 11; x)
{
    std::cout << counter << endl;
}
Run Code Online (Sandbox Code Playgroud)

最初我认为++counter会增加1,然后返回新值,然后在循环头中评估布尔表达式.即,当使用counter = 1和使用时++counter,counter布尔表达式中的值为2.这似乎并非如此,因为两个输出都是相同的,而不是++counter像我预期的那样具有少一次迭代的版本.

在周围读取时,它分别在循环体的开始或结束处出现++countercounter++递增counter1.在这种情况下,至少在概念上,这不是一个相同的行动吗?因为一旦循环超过第一次迭代,循环的结束和开始是相同的.

我唯一能看到这个有所作为的是第一次迭代,std::cout << counter << endl;如果counter++使用的话,应该输出1到控制台(因为在循环结束时将1添加到计数器).虽然std::cout << counter << endl;应该输出2到控制台如果++counter被使用(因为1被添加在循环的开始到计数器).

除了上面的问题,你能否准确地解释在for循环标题中评估三个动作的顺序,并准确地解释使用i++和时迭代发生的位置++i.

非常感谢!

c++ for-loop increment pre-increment post-increment

6
推荐指数
2
解决办法
1552
查看次数