今天在写一个小程序的时候,需要用到移位操作,可谁想竟然给弄出来个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的值,估计是受到++和–操作符的影响,谁叫人家长得比较像了,下次要注意了!
转载请注明:Coding Ants » warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符
学习了!!