这段代码的输出是什么?我在这里错过了什么吗?
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++ 程序有效。
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++ 程序有效。