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

What is the output of this code? Am i missing something here?

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

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

但在 PC 上我得到编译错误,因为 ---- 在 a-- 之前使编译器认为此“----”中有 pre/post 递减运算符并要求一个操作数。有什么解决办法?

一个正确的程序可以通过下面的方式找例子

#include <iostream>

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

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

    return 0;
}

它的输出是

13
12

post自减运算符的优先级高于前置自减运算符,其结果为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 中的预递减运算符也是 returns 右值,您不能将运算符应用于右值。

只有 C++ 程序有效。