C++ 函数指针与条件分支
有没有可能不检查函数中的bool(从而分支),而是提前计算bool并将函数指针更改为所需的行为会更快 考虑:C++ 函数指针与条件分支,c++,conditional-statements,branch,C++,Conditional Statements,Branch,有没有可能不检查函数中的bool(从而分支),而是提前计算bool并将函数指针更改为所需的行为会更快 考虑: #include <iostream> class A { public: A() { workTrue = [] () { std::cout << "True" << std::endl; }; workFalse = [] () { std::cout << "False" <&
#include <iostream>
class A
{
public:
A()
{
workTrue = [] () { std::cout << "True" << std::endl; };
workFalse = [] () { std::cout << "False" << std::endl; };
SetArgs(false);
}
void SetArgs(bool _b)
{
b = _b;
work = b ? &workTrue : &workFalse;
}
void DoWork()
{
(*work)();
// b ? workTrue() : workFalse();
}
private:
std::function<void()> workTrue;
std::function<void()> workFalse;
std::function<void()>* work;
bool b;
};
int main()
{
A a;
a.DoWork();
}
#包括
甲级
{
公众:
()
{
workTrue=[](){std::cout最好遵循工厂设计模式。如下所示:
#include <iostream>
class WorkFactory
{
public:
WorkFactory()
{
}
virtual void Work() = 0;
};
class WorkFalse : public WorkFactory
{
public:
WorkFalse()
{
}
void Work() final
{
std::cout << "False" << std::endl;
}
};
class WorkTrue : public WorkFactory
{
public:
WorkTrue()
{
}
void Work() final
{
std::cout << "True" << std::endl;
}
};
int main()
{
WorkFactory* w;
bool var = false;
if (var)
{
w = new WorkTrue();
}
else
{
w = new WorkFalse();
}
w->Work();
}
#包括
阶级工厂
{
公众:
工场(
{
}
虚空功()=0;
};
类WorkFalse:公共工作工厂
{
公众:
工作假()
{
}
无效工作()最终版本
{
std::我不能确定,但我可以想象,如果您可以完全消除函数调用,那么DoWork()
中的分支应该会更快找到并优化问题的答案取决于许多因素。您是否尝试过实现它并对结果进行基准测试?您的基准测试是否将此领域确定为代码中的性能瓶颈?请注意,std::function
应用类型擦除,这也会带来大量开销。分支可能是,也可能不是aster,这取决于许多因素。请注意,您可以使用成员函数指针,而不是std::function
,但是,您的替代方法必须是成员函数。是否可能?是的。所有方法都能保证吗?否。通过您选择的任何度量,是否有任何特定方法保证始终是最优的?否。跳转预测和分支预测。我认为目前分支预测做得更好。