今天在工作中我们遇到了以下代码(有些人可能认识它):
#define GET_VAL( val, type ) \
{ \
ASSERT( ( pIP + sizeof(type) ) <= pMethodEnd ); \
val = ( *((type *&)(pIP))++ ); \
}
基本上我们有一个字节数组和一个指针。该宏返回对类型变量的引用,并将指针前进到该变量的末尾。
它让我多次想起我需要“像解析器一样思考”才能理解 C++ 代码。
您是否知道其他代码示例导致您停下来多次阅读,直到您掌握了它的用途?
Quake 3 中的反平方根实现:
float InvSqrt (float x){
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
Update:
这是如何运作的 http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf(谢谢瑞安)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)