你能简单解释一下我理解这个吗?
当我这样做:count = ++ count; 为什么我会收到警告 - 对变量计数的赋值没有效果?这意味着计数递增,然后分配给自己或其他东西?它和++ count一样吗?count = count ++中会发生什么??为什么我没有收到警告呢?
我知道这个问题已经讨论了好几次了,但我找不到一个解释为什么在后增量操作时需要复制的帖子.
引用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.
当考虑后/前增量的定义时,这是完全有意义的.很多时候,在比较前/后增量的性能时,可以说后增量需要复制,增加它并返回副本,而预增量只增加值而不创建副本.
虽然已经在数十篇帖子中对性能进行了比较,但我真的找不到为什么在后增量的情况下必须制作副本的任何解释.为什么不返回旧值,然后将变量的值增加1(或者操作符重载方式),而不是创建新对象并返回该对象.
我有一个C程序,它是使用数组的队列操作。在该程序中,它们在数组内增加一个变量。我不明白那是怎么回事。因此,请解释以下操作:
array[++i];
array[i++];
我正在从缓冲区读取字节。但是有时候我读的是一个单词或更长时间。
// assume buffer is of type unsigned char *
read_ptr(buffer+(position++))
很好,但是如何将位置增加2或4?我无法让+=操作员后期递增,是吗?
原因是,我有一个很糟糕的表达式要评估,同时要增加位置变量。
我想我想出了自己的解决方案。我很确定它能起作用。每个人都会讨厌它,因为这不是易读的代码。
read_ptr(buffer+(position+=4)-4)
经过一点测试以确保它做对了之后,我将其放入宏中。
结论:
不要这样 这只是一个坏主意,因为这是生成无法维护的代码的一种东西。但是...事实证明,将任何一个预递增运算符转换为一个后递增运算符确实很容易。
我在Visual C++和Java中运行以下程序:
Visual C++
void main()
{
    int i = 1, j;
    j = i++ + i++ + ++i;
    printf("%d\n",j);
}
输出:
6
Java的:
public class Increment {
    public static void main(String[] args) {
        int i = 1, j;
        j = i++ + i++ + ++i;
        System.out.println(j);
    }
}
输出:
7
为什么这两种语言的输出不同?语言对于前后增量运算符的处理方式有何不同?
    #include <stdio.h>
    int main()
    {
        int a = 10;
        if (a == a--)
            printf("TRUE 1\t");
        a = 10;
        if (a == --a)
            printf("TRUE 2\t");
    }
为什么第二个if语句是真的?
输出为:TRUE 1 TRUE 2
这是否由于未定义的行为而发生,因为我将相同的变量与其递减的值进行比较?
我们不能在rvalues上使用预增量:
int i = 0;
int j = ++i++; // Compile error: lvalue required
如果我们定义一个类:
class A
{
public:
    A & operator++()
    {
        return *this;
    }
    A operator++(int)
    {
        A temp(*this);
        return temp;
    }
};
然后我们可以编译:
A i;
A j = ++i++;
A对象和int数据类型之间有什么不同
j = ++i++;
用A编译但不用int编译?
虽然这个问题可能在某处得到回答,但我找不到。
下面写的第一条语句有效而第二条语句无效?为什么?
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;
}
c++ unary-operator pre-increment post-increment postfix-operator
我知道这里有一些关于 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);
}
当我这样做replace(++str, c1, c2);或replace(str+1, c1, c2);它有效时,但replace(str++, c1, c2);没有。为什么?
post-increment ×10
c ×5
c++ ×5
java ×3
arrays ×1
c-strings ×1
increment ×1
operators ×1
overloading ×1
performance ×1
recursion ×1