gpt4 book ai didi

c++ - 使用指向成员函数的指针与使用开关的成本是多少?

转载 作者:IT老高 更新时间:2023-10-28 23:09:47 25 4
gpt4 key购买 nike

我有以下情况:


class A
{
public:
A(int whichFoo);
int foo1();
int foo2();
int foo3();
int callFoo(); // cals one of the foo's depending on the value of whichFoo
};

在我当前的实现中,我将 whichFoo 的值保存在构造函数的数据成员中,并在 callFoo() 中使用 switch 来决定调用哪个 foo。或者,我可以在构造函数中使用 switch 来保存指向要在 callFoo() 中调用的正确 fooN() 的指针。

我的问题是,如果 A 类的对象只构造一次,而 callFoo() 被调用很多次,那么哪种方式更有效。因此,在第一种情况下,我们多次执行 switch 语句,而在第二种情况下,只有一个 switch,并且使用指向它的指针多次调用成员函数。我知道使用指针调用成员函数比直接调用要慢。有谁知道这个开销是大于还是小于 switch 的成本?

澄清:我意识到,在您尝试并计时之前,您永远不会真正知道哪种方法可以提供更好的性能。但是,在这种情况下,我已经实现了方法 1,我想知道方法 2 是否至少在原则上更有效。看来它可以,现在我费心去实现它并尝试它是有意义的。

哦,出于美学原因,我也更喜欢方法 2。我想我正在寻找实现它的理由。 :)

最佳答案

您如何确定通过指针调用成员函数比直接调用它慢?你能衡量一下差异吗?

一般来说,在进行绩效评估时,您不应依赖直觉。坐下来看看你的编译器和一个计时函数,并实际测量不同的选择。你可能会感到惊讶!

更多信息:有一篇很棒的文章 Member Function Pointers and the Fastest Possible C++ Delegates其中对成员函数指针的实现进行了非常详细的介绍。

关于c++ - 使用指向成员函数的指针与使用开关的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113150/

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