当以高级程序员的身份键入程序时,n = 0;
看起来更加高效和简洁。
但是n = 0;
确实比if (n != 0) n = 0;
更有效吗?
n
更有可能是0
时。
n
不太可能是0
时。
n
绝对不确定时。
如果n
是2的补码整数类型或无符号整数类型,那么直接写入n = 0
当然不会比带有条件检查的版本慢,并且良好的优化编译器将生成相同的代码。一些编译器将寄存器值与自身进行XOR运算,从而将赋值编译为零,这是一条指令。
如果n
是浮点类型,1的补码整数类型或有符号幅度整数类型,则两个代码段的行为不同。例如。例如,如果n
的符号为负零。 (确认@chqrlie。)同样,如果n
是系统上的指针,但没有多个空指针表示,则当if (n != 0) n = 0;
是各种null指针之一时,n
将不会分配n
。 。 n = 0;
赋予其他功能。
“将永远更有效率”是不正确的。如果读取n
的成本较低,而写入n
的成本较高(考虑重新写入需要重写页面的非易失性存储器),并且可能n == 0
,则n = 0;
会较慢, less比if (n != 0) n = 0;
更有效率。