我有一个关于在以下情况下调用成员函数时的任何性能损失的问题:
我正在编写用于物理计算的代码,并且有很多需要时间的任务,例如操作巨大的矩阵、线性代数等。我设计了一个类来处理日志文件,并且如果有一个成员函数来编写它bool 类型称为debug_mode_on
is true
。函数签名是
void write_debug_msg(const data_type1 &text1, const data_type2 &text2, etc)
一个内联的、模板化的和重载的。它可以接收多达 15 个任何类型的参数作为输入。
好的......所以问题是,什么时候debug_mode_on
调用false
函数并且什么也没做。否则,很明显,参数被写入日志文件中。那么是否有任何可观的惩罚表现?我的观点是,它是一个 void 函数类型,没有返回的东西。所有参数都作为参考给出。它也是内联的。从我的角度来看,唯一真正的惩罚是对 bool 类型的评估(不是陈述,if
而是switch
陈述)。那正确吗?
或者使用引用给出的参数调用内联 void 函数可能会有点昂贵,我们谈论的是评估而不是switch
语句?
当然,我们并没有采用相同的策略来解决这个问题,即把所有关于调试模式的东西都放在某种宏中,比如#ifdef DEBUG_MODE
and #endif
。我们这样做只是为了能够在运行时控制调试模式。