标签: post-increment


对变量的赋值没有效果?

当我这样做: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 / C ++后递增不止一个

我正在从缓冲区读取字节。但是有时候我读的是一个单词或更长时间。

// assume buffer is of type unsigned char *
read_ptr(buffer+(position++))
Run Code Online (Sandbox Code Playgroud)

很好,但是如何将位置增加2或4?我无法让+=操作员后期递增,是吗?

原因是,我有一个很糟糕的表达式要评估,同时要增加位置变量。

我想我想出了自己的解决方案。我很确定它能起作用。每个人都会讨厌它,因为这不是易读的代码。

read_ptr(buffer+(position+=4)-4)
Run Code Online (Sandbox Code Playgroud)

经过一点测试以确保它做对了之后,我将其放入宏中。

结论:

不要这样 这只是一个坏主意,因为这是生成无法维护的代码的一种东西。但是...事实证明,将任何一个预递增运算符转换为一个后递增运算符确实很容易。

c c++ operators post-increment

6
推荐指数
1
解决办法
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
查看次数

为什么表达式a == - if语句中为true?

    #include <stdio.h>

    int main()
    {
        int a = 10;
        if (a == a--)
            printf("TRUE 1\t");
        a = 10;

        if (a == --a)
            printf("TRUE 2\t");
    }
Run Code Online (Sandbox Code Playgroud)

为什么第二个if语句是真的?

输出为:TRUE 1 TRUE 2

这是否由于未定义的行为而发生,因为我将相同的变量与其递减的值进行比较?

c pre-increment post-increment

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

C++ post-increment:对象与原始类型

我们不能在rvalues上使用预增量:

int i = 0;
int j = ++i++; // Compile error: lvalue required
Run Code Online (Sandbox Code Playgroud)

如果我们定义一个类:

class A
{
public:
    A & operator++()
    {
        return *this;
    }
    A operator++(int)
    {
        A temp(*this);
        return temp;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我们可以编译:

A i;
A j = ++i++;
Run Code Online (Sandbox Code Playgroud)

A对象和int数据类型之间有什么不同

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

用A编译但不用int编译?

c++ overloading post-increment

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

&amp;++x 和 &amp;x++ 的区别

虽然这个问题可能在某处得到回答,但我找不到。

下面写的第一条语句有效而第二条语句无效?为什么?

int main() {
  int x = 1, y = 2;

  int *p = &++x; // First
  std::cout << "*p = " << *p << std::endl;

  // int *q = &x++; // Second
  // std::cout << "*q = " << *p << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ unary-operator pre-increment post-increment postfix-operator

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

为什么 ++str 和 str+1 有效而 str++ 无效?

我知道这里有一些关于 p++、++p 和 p+1 之间区别的解释,但我还不能清楚地理解它,尤其是当它不使用该函数时:

void replace(char * str, char c1, char c2){

    if (*str == '\0') {
        return;
    }else if (*str == c1) {
        printf("%c", c2);
    }
    else {
        printf("%c", *str);
    }

    replace(++str, c1, c2);
}
Run Code Online (Sandbox Code Playgroud)

当我这样做replace(++str, c1, c2);replace(str+1, c1, c2);它有效时,但replace(str++, c1, c2);没有。为什么?

c recursion c-strings post-increment function-declaration

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