标签: post-increment

后增量运算符行为与逗号运算符?

在以下代码中:

int main() {
   int i, j;

   j = 10;
   i = (j++, j+100, 999+j);

   cout << i;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出为1010

但是,它不应该是 1009,就像++在使用整个表达式之后应该做的那样吗?

c++ comma post-increment

4
推荐指数
1
解决办法
116
查看次数

为什么 ++(后增量运算符)不能是左值?

代码

#include<iostream>
int main()
{
    int a=3;
    a++=5;
    std::cout<<a;
}
Run Code Online (Sandbox Code Playgroud)

输出(如预期)

[Error] lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

1.后增量运算符 ( a++) 在表中具有最高优先级。所以它肯定会在赋值运算符 ( =)之前执行。并且根据后增量规则,变量的值a只有在执行该语句后才会增加。

那么当后增量运算符 ( ++) 在赋值运算符 ( =)之前执行时究竟会发生什么?

2.C 中,前自增运算符和后自增运算符都产生右值,但C++将前自增运算符更新为左值,同时将后自增运算符仅保留为右值。原因是我们不能让它成为左值,因为它只有旧值,而不是更新的值。但我不能正确理解这个原因。

现在a++看到右值是 3,而不是变量本身,对吧?但是如果它带来一个拥有左值的变量,那么 5 将插入其中,并且在语句结束后它的值将是 6。这有什么问题,为什么不能这样做?

c++ rvalue lvalue post-increment

4
推荐指数
1
解决办法
80
查看次数

跟进.是否定义了返回引用x ++?

我最近问的问题是返回x ++的行为; 界定?

结果是关于我的预期,但让我想到了类似的情况.

如果我要写

class Foo
{   
  ...   
  int x;   
  int& bar() { return x++; }
};
Run Code Online (Sandbox Code Playgroud)

bar现在返回int引用,是否定义了此行为?如果上一个问题的答案确实是真的,而不仅仅是对正在发生的事情的方便抽象,那么看起来你会返回一个堆栈变量的引用,一旦执行返回就会被销毁.

如果它只是一个抽象,我有兴趣知道后增量实际上保证了什么行为.

c++ return defined post-increment

3
推荐指数
1
解决办法
185
查看次数

语言是否需要preIncrement(++ x)和postIncrement(x ++)

我从未在实际代码中看到用于预增量后增量的用例.我经常看到它们的唯一地方是谜题.
我的观点是,它引入了更多的混淆而不是有用.

  • 是否有任何真实的用例场景
  • 这不能通过使用+ =来完成

    y = x++

    y = x
    x += 1

programming-languages increment pre-increment post-increment

3
推荐指数
2
解决办法
1244
查看次数

switch语句和增量运算符

我写了以下代码:

int i = 0;  
switch(i++)  
{
   case 0:  
     cout << 0;  
   case 1:  
     cout << 1;
}  
cout << "\n" << i;  
Run Code Online (Sandbox Code Playgroud)

代码的输出是这样的:

01  
1
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释第一行输出?为什么0和1都被打印?

c++ switch-statement post-increment

3
推荐指数
2
解决办法
1848
查看次数

一元运算符在c ++中重载特殊情况

我成功完全重载了一元++,--postfix /前缀运算符,我的代码工作正常,但在使用(++obj)++语句时,它返回意外的结果

这是代码

class ABC
{
 public:
    ABC(int k)
    {
        i = k;
    }


    ABC operator++(int )
    {
        return ABC(i++);
     }

     ABC operator++()
     {
        return ABC(++i);
     }

     int getInt()
     {
      return i;
     }
    private:
   int i;
 };

 int main()
 {
    ABC obj(5);
        cout<< obj.getInt() <<endl; //this will print 5

    obj++;
     cout<< obj.getInt() <<endl; //this will print 6 - success

    ++obj;
    cout<< obj.getInt() <<endl; //this will print 7 - success

    cout<< (++obj)++.getInt() <<endl; //this will print 8 …
Run Code Online (Sandbox Code Playgroud)

c++ unary-operator visual-c++ post-increment

3
推荐指数
1
解决办法
534
查看次数

引用类型返回函数和后缀增量

我正在阅读有关参考文献的维基百科页面.

它包含以下代码:

int& preinc(int& x) 
{ 
    return ++x;  // "return x++;" would have been wrong
}

preinc(y) = 5; // same as ++y, y = 5
Run Code Online (Sandbox Code Playgroud)

我确实尝试使用return x++;而不是编译return ++x;.正如预测的那样,这导致了以下错误:

错误:从'int'类型的临时类型初始化'int&'类型的非const引用

我不明白这个错误.我有一种模糊的直觉,即x的增量发生得太晚(即,在preinc的函数调用结束后).但是,我不知道这是一个什么问题,因为变量x永远不会存在.欢迎任何解释.

c++ reference post-increment

3
推荐指数
1
解决办法
697
查看次数

这个循环中++ i和i ++之间有区别吗?

array.prototype.reduce函数位于:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

它有以下循环:

for (index = 0; length > index; ++index) {
    if (this.hasOwnProperty(index)) {
      if (isValueSet) {
         value = callback(value, this[index], index, this);
      } else {
        value = this[index];
        isValueSet = true;
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不认为索引在这里是先增加还是后增加,因为它是在每次循环迭代之后完成的,但是想要确定.

可以将其更改为index + = 1,以便传递jslint吗?请不要讨论jslint警告的优点.

这种变化会有什么不同吗?

javascript loops jslint pre-increment post-increment

3
推荐指数
1
解决办法
3116
查看次数

在Java中添加后增量

我在java中有以下代码

int x=5;
System.out.println(x++ + ++x);
Run Code Online (Sandbox Code Playgroud)

输出是12.

我以为它应该是11.

我们这里有三个运营商:

  • + 加成
  • ++ (POST)
  • ++ (预)
  • 项目清单

上面的print语句以哪种顺序编译?

如果我写int x=5;,然后++x,做x==6x==5我没有写x=++x.新值是否存储在x中?

寻找一种方法来记住Java或.NET中的运算符优先级,就像我们有DMAS一样.这也是他们的任何类比吗?

.net java operators addition post-increment

3
推荐指数
1
解决办法
245
查看次数

分配和后递增循环迭代器时的C++无限循环(gcc bug?)

前几天我在我们的一个C++应用程序中遇到了一个奇怪的拼写错误,触发了代码进入无限循环.在for循环结束时i++,程序员意外地分配,而不是仅仅递增i = i++.

for (int i = 0; i < 10; i = i++) {
    cout << "i = " << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

i = 0
i = 0
i = 0
...
Run Code Online (Sandbox Code Playgroud)

最奇怪的是,即使理解这是一个错字,我也看不出为什么这段代码不起作用.据我所知,分配i应该没有影响,因为i在分配后仍应增加.(出于某种原因,它必须改为复制一份?但这似乎没有意义.)

另一个有趣的事情是将赋值更改为i = ++i不会产生无限循环.

这段代码在我们之前的编译器中没有产生无限循环:gcc version 4.4.7 20120313.我们最近升级到gcc version 4.8.5 20150623现在它.

问题是为什么这个代码在逻辑上看起来不应该产生无限循环,哪个编译器根据C++标准正确解释这个?

c++ gcc for-loop variable-assignment post-increment

3
推荐指数
1
解决办法
100
查看次数