c++ - 条件评估是否优化?这段代码不好吗?

标签 c++ optimization conditional-statements logical-operators evaluation

1.想象条件if (obj.is_x() || obj.is_y() || obj.is_z())
如果 obj.is_x() 返回 true,是否会调用和评估 obj.is_y()obj.is_z()

2.这是个坏主意吗(一般而言)?这段代码看起来不好吗?

bool isbn13_prefix_valid (const string& prefix)
{
    unsigned num = stoi(prefix);
    if (num == 978 || num == 979) return 1;  //super common ones
        else if (   num >= 0 && num <= 5 || num == 7 || num >= 600 && num <= 649
                || num >= 80 && num <= 94 || num >= 950 && num <= 989
                || num >= 9900 && num <= 9989 || num >= 99900 && num <= 99999)
            return 1;
    return 0;
}

最佳答案

  1. 不,不会,因为 short-circuiting .

  2. 是的,该代码看起来很糟糕。不是因为它不正确,而是因为您将一个非常长的条件塞入单个 if 语句中。尝试重构您的代码以使其更清晰。

关于c++ - 条件评估是否优化?这段代码不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117152/

相关文章:

c++ - 同一变量的多个值的 If 语句

c++ - 不能将 create_async() 与 WRL WinRT 组件一起使用

c++ - 解耦顶级 MFC 对话框

c++ - QAbstractItemModel 是如何表示树的?

c++ - 寻找堆栈损坏错误的解释

mysql - 选择 * 和查询优化器

r - 等价于R中“uniroot”中“optimize”的“objective”?

将某些变量替换为 NA,其中一个变量为 NA

python - 在 Dataframe 中为每个组取下一个较低的值

c++ - 如何在标准 C++ 中递归地遍历每个文件/目录?