gpt4 book ai didi

c++ - 检查 bool 比调用空函数更有效吗?

转载 作者:行者123 更新时间:2023-11-30 01:54:27 24 4
gpt4 key购买 nike

如果我有一个对象 Foo,其函数 Bar() 可能包含也可能不包含任何实际功能,首先检查公共(public) bool 成员是否更快 HasBar 来确定是否有调用 Bar() 的点,或者只是调用该函数,如果它什么都不做就立即返回?

即给出:

class Foo
{
public:
bool HasBar;
void Bar()
{
}
};

这样做更好吗:

Foo myFoo;
if (myFoo.HasBar)
{
myFoo.Bar();
}

..或者这个:

Foo myFoo;
myFoo.Bar();

通常,我认为后者会被编译器优化掉,但我们讨论的对象是由驻留在运行时动态加载的 DLL 中的工厂动态实例化的对象。

由于我已经感觉到“过早的优化” torch 和干草叉正在接近,让我提供一些背景信息(除了我很想知道的事实,无论我在做什么):

这是其他应用程序将在其上运行的引擎的一部分,因此它越轻便越好(任何优化都是好的)。将有一棵每秒迭代多次的多态 Foo 对象(可能有数千个)树。每次迭代包括 3 次遍历树,在每次遍历期间,对每个对象调用不同的函数。

例如,在第一遍期间,将在每个对象上调用 Bar1(),在下一个 Bar2() 和最后一个期间,将调用 Bar3 ()。有些对象在这些函数中工作,有些则不然。迭代器不知道,所以它必须根据传递盲目地调用适当的函数。问题背后的原因是什么 - 它应该首先检查当前对象是否有意义地实现了相应的功能(例如,通过检查每个对象公开的标志),还是应该不顾一切地调用它?

最佳答案

如果没有进行优化,检查单个 bool 变量比进入函数、在堆栈上分配内容并跳回要便宜得多。尽管这种优化还为时过早。

关于c++ - 检查 bool 比调用空函数更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com