我有以下内联方法并在其他方法中多次调用它。具有 O2 优化的 vc 和 gcc 编译器是否能够注意到该值在调用方法中是固定的并且只评估一次?--indexAndFlag
在这些方法中确实没有改变。-- 或者,也许为了线程安全,每次调用都会对其进行评估?
unsigned int indexAndFlag;
...
inline Index* index() const
{
return (Index*)(indexAndFlag & ~1);
}
该代码仅适用于保护模式 x86 32/64 位架构,所以我希望,我可以假设sizeof(unsigned int) == sizeof(Index*)
. 如果没有,请纠正我。