这段代码的输出是什么?我错过了什么吗?

时间:2016-06-29 13:26:10

标签: c++ operators increment decrement

void main()
{
    int num, a=15; 
    num = ----a--;
    cout<<num;
    cout<<a;
 }

我试过了......我应该得到 15 14 在纸面上,因为4减去相互取消,剩下的是 -

但是在PC上,我得到了编译错误,因为 - 在a--让编译器认为在这个&#39; ----&#39;之前有一些前/后递减运算符。并要求操作数。解决方案是什么?

1 个答案:

答案 0 :(得分:3)

正确的程序可以查看以下方式

#include <iostream>

int main() 
{
    int num, a = 15; 
    num = ( ----a )--;

    std::cout << num << std::endl;
    std::cout << a << std::endl;

    return 0;
}

它的输出是

13
12

后递减运算符的优先级高于预递减运算符,其结果为rvalue,可能不会更改。

此表达式

----a--

相当于

----( a-- )

并且不会编译。

所以你需要使用括号来编译程序。

考虑用C编写的相应程序,例如

#include <stdio.h>

int main( void ) 
{
    int num, a = 15; 
    num = ( ----a )--;

    printf( "%d\n", num );
    printf( "%d\n", a );

    return 0;
}

将无法编译,因为C中的预递减运算符也返回rvalue,您可能不会将运算符应用于rvalue。

只有C ++程序有效。