warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符

转自:http://www.letuknowit.com/topics/20111124/warning-c4552.html/


今天在写一个小程序的时候,需要用到移位操作,可谁想竟然给弄出来个warning C4552,具体错误如下:

warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符

检查了下代码,原来是自己疏忽导致的,我的代码如下:

int a=2;

a>>1;

  本来是想将变量a进行移位操作,可是最终的结果是a原先是多少,最后还是多少,一点也没变,正确的写法应该是:

a>>=1;

  >>只是个运算符,和+、-等运算符一样,只执行运算的功能,却不会改变操作数的值,因此作为左操作数的a在执行移位操作后会保持原来的值不变,这是一个很要命的、不显眼的错误,因为本来应该进行移位的操作却没有执行,而编译没有任何问题,还好在编译的时候有标题中所示的C4552警告信息。

如果你愿意,你可以编译一下下面的代码

int a = 2;
 a>>1;
 a+1;
 a-1;
 a*1;
 a/1;

你会得到下面的警告信息,这样看起来应该就好理解了

warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “+”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “-”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “*”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “/”: 运算符不起任何作用;应输入带副作用的运算符

  把a>>1;误认为可以改变a的值,估计是受到++和–操作符的影响,谁叫人家长得比较像了,下次要注意了!

你可能感兴趣的:(C/C++)