为什么增量运算符不起作用?

时间:2011-11-11 14:05:26

标签: c++

  

可能重复:
  Undefined Behavior and Sequence Points

int a=10;

a=a++;


a=++a;


a=(a++);

请你们解释一下为什么这些案件都不起作用?

4 个答案:

答案 0 :(得分:5)

以正确的方式使用它:

int a = 10;
a++;
cout << a;
++a;
cout << a;

答案 1 :(得分:1)

http://codepad.org/cYXEuRuQ

回答此代码的C ++问题
#include<iostream.h>
int main()
{
int a=10;
a=a++;
cout<<a;
cout<<"\n";
a=++a;
cout<<a;
cout<<"\n";
a=(a++);
cout<<a;
cout<<"\n";
}

编译时打印

cc1plus: warnings being treated as errors
In function 'int main()':
Line 5: warning: operation on 'a' may be undefined
Line 8: warning: operation on 'a' may be undefined
Line 11: warning: operation on 'a' may be undefined

这是一个警告,指出所使用的操作未定义,如果可能,不应使用。这是因为在C ++中,++相对于其他表达式的评估顺序没有定义,并且在所有编译器中都不相同。 (一般来说,这并不重要,除了像这样的边缘情况外不是问题)

网站更进一步,将警告视为错误,不会运行代码。


如果您翻译为Java,则打印

10
11
11

正如所料。你的意思是“不起作用”?

行为在Java中定义,但是LucTouraille指出它没有在C ++中定义,所以你不能指望所有编译器都有相同的特定行为。

另一个例子。

int a = 3;
a = a++ * a++;
System.out.println(a); // will always be 12 in Java.

相同
{
    int t1 = a;
    a = a + 1;
    int t2 = a;
    a = a + 1;
    a = t1 * t2;
}

答案 2 :(得分:1)

算法的序列:

    int a=10;

    a=a++;
    System.out.println(a);

    a=++a;
    System.out.println(a);


    a=(a++);
    System.out.println(a);

如下:

a=++a;表示在将表达式分配给a之前,a先递增。因此a = 11

a=(a++);表示可以理解为

b = a;
a++;
a = b;

因此,您收到的值为11

答案 3 :(得分:0)

他们都应该工作。 我不确定你的语言是什么。但是,如果你的C / C ++它应该工作。