C++ 游戏地图对象属性的位域与多态性

C++ 游戏地图对象属性的位域与多态性,c++,optimization,polymorphism,bit-manipulation,bit-fields,C++,Optimization,Polymorphism,Bit Manipulation,Bit Fields,这个优化问题在最后一天一直困扰着我 在我的程序(一个简单的类似流氓的游戏)中,我使用位标志来存储贴图对象的属性,例如它们是实体还是渲染。但是,我可以使用多态性来返回适当的值 我的问题是,当在链表循环中使用时,这两种方法是明显快还是慢?还有,一种做法比另一种好吗 代码示例如下: XMapObject *List = ListStart; while(List != NULL) { if(List->MapObjectFlags & MAPOBJECTFLAG_RENDER)

这个优化问题在最后一天一直困扰着我

在我的程序(一个简单的类似流氓的游戏)中,我使用位标志来存储贴图对象的属性,例如它们是实体还是渲染。但是,我可以使用多态性来返回适当的值

我的问题是,当在链表循环中使用时,这两种方法是明显快还是慢?还有,一种做法比另一种好吗

代码示例如下:

XMapObject *List = ListStart;

while(List != NULL)
{
    if(List->MapObjectFlags & MAPOBJECTFLAG_RENDER)
      OR
    if(List->Render())
    {
        return List->Type;
    }
    else
    {
        List = List->Next;
    }
}

bool XMapObject::Render()
{
     return 1;
}

谢谢。

按位操作总是比虚拟函数调用快。

按位操作总是比虚拟函数调用快。

我想是的。仔细想想,它也更灵活了。如果单个
int
(或用于存储的任何内容)中的位数非常有限,它怎么可能更灵活呢?比我原来的示例更灵活,它有硬编码的返回。我想是这样的。仔细想想,它也更灵活。如果单个
int
(或用于存储的任何内容)中的位数非常有限,它怎么可能更灵活?比我原来的示例更灵活,它有硬编码返回。我认为,这是一个过早的优化。此外,您还可以创建非虚拟内联Render()成员函数,该函数将简单地
返回MapObjectFlags&MAPOBJECTFLAG\u Render
,并使用它代替隐式逐位操作。然后,如果您决定切换到另一种检查方法,您只需更改实现。@n0rd:这肯定是不成熟的,但问题一直困扰着我,因为我在项目中管理一些较旧的源代码。我认为,您正在进行的优化是不成熟的。您还可以创建非虚拟内联渲染()成员函数,该函数将简单地
返回MapObjectFlags&MAPOBJECTFLAG_RENDER
,并使用它代替隐式按位操作。然后,如果您决定切换到另一种检查方法,您只需更改实现。@n0rd:这肯定是不成熟的,但这个问题一直困扰着我,因为我正在管理项目中的一些旧资源。