c++ - 什么更快 : noop function call or if statement?

标签 c++ if-statement function-call

我有一个删除器的函数指针,但大多数时候,不需要删除器,只有当我维护某物的内部拷贝时才需要。目前我使用 noop 删除功能来做到这一点:

class MyClass{
public:
  // bind object
  template<class Type>
  void Bind(Type* obj){
    Cleanup();
    object_ = obj;
  }

  // bind object with internal copy
  template<class Type>
  void Bind(Type obj){
    Cleanup();
    object_ = new Type(obj);
    deleter = &Deleter<Type>;
  }

private:
  template<class Type>
  static void Deleter(void* obj_ptr){
    Type* obj = static_cast<Type*>(obj_ptr);
    delete obj;
  }

  static void NoopDeleter(void* unused){
  }

  void Cleanup(){
    (*deleter_)(object_);
    object_ = 0;
    deleter_ = &NoopDeleter;
  }

  typedef void (*DeleterFunc)(void*);

  void* object_;
  DeleterFunc deleter_;
};

现在明显的其他选择是在不需要时将其设置为 0,并使用 if(deleter_ != 0) 检查 Cleanup 函数(*deleter_)(object_).
现在在编码过程中,我突然想到“嗯,哪个版本会更快?”,所以这更多是个人兴趣而不是优化。对不起,如果这个问题听起来有点愚蠢,但它有点让我烦恼,我真的很想知道。感谢您提前回答!

最佳答案

函数调用必须设置堆栈帧。所有 if 语句所要做的就是执行一条机器指令。可能是两个,具体取决于机器的架构。

关于c++ - 什么更快 : noop function call or if statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386341/

相关文章:

c++ - 如何使用 C++ 或调用 winapi 查找字符是否属于特定代码页

c++ - T 和 T const 上模板函数实例化的地址

c++ - 我在 C++ 程序中的内存泄漏

在 C 中检查命令行参数

regex - 替代字符串中组上的vim调用函数

c++ - C2870 模糊符号错误

datetime - VBScript-运行文件的日期和时间约束

mysql - 是否可以在 mysql 查询中使用 IF 条件?

java - 调用对象时这些括号是什么意思?

c++ - C++中的方法,每隔特定分钟数调用一个函数