gpt4 book ai didi

C++函数静态本地,性能?

转载 作者:行者123 更新时间:2023-11-28 06:52:36 25 4
gpt4 key购买 nike

我有一个函数,它必须根据表示运算符类型的成员枚举的值返回 true 或 false。

我想知道以下选项之间最快的是什么,因为我不确定编译器将执行哪些隐式优化(如果有的话)。

   inline bool isBinaryOper( void ) const // Fastest i assume.
{
static const bool arr[] =
{
true, // E_PLUS
true, // E_MINUS
true, // E_MULTIPLY
true, // E_DIVIDE
false, // E_LPARENT
false, // E_RPARENT
false, // E_COMMA
false // E_SEMICOLON
};

return arr[ size_t( this->_eType ) ]; // Assuming values are valid indexes.
}

或者:

   inline bool isBinaryOper( void ) const
{
switch( this->_eType )
{
case E_PLUS : return true;
case E_MINUS : return true;
case E_MULTIPLY : return true;
case E_DIVIDE : return true;
case E_LPARENT : return false;
case E_RPARENT : return false;
case E_COMMA : return false;
case E_SEMICOLON : return false;
default : ...
};
}

或者,我猜这与上一个非常相似:

   inline bool isBinaryOper( void ) const
{
if ( this->_eType == E_PLUS ) return true;
else if ( this->_eType == E_MINUS ) return true;
// etc...
}

哪个最快,为什么?

最佳答案

我觉得这个问题是过早优化的一个实例,但就其值(value)而言,我会选择 switch 语句,尽管它可能会稍微慢一些,因为:

  1. 您不会注意到减速。

  2. 假设您填写 default: 情况,switch 实现会保护您免受无效数据或枚举定义更改的影响,这将简化调试。

  3. gcc 和 clang(可能还有其他优秀的编译器)都会将转换优化为二进制搜索或跳转表,具体取决于备选方案的排序方式和目标平台的精确特征。在这两种情况下,它都不会简单地对每个可能的值进行线性检查,例如 if ... else if ... else if ... 选项,这几乎肯定是最慢的。

    这使您无需考虑如何对备选方案进行排序,特别是因为您可能需要具有不同排序的各种 bool 函数。除非您是计算机体系结构方面的专家,否则您可以合理地假设您的编译器能更好地理解它。

关于C++函数静态本地,性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658402/

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