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

use*_*923 2 c++ optimization evaluation logical-operators conditional-statements

1.Imagine条件if (obj.is_x() || obj.is_y() || obj.is_z())
obj.is_y()obj.is_z()被调用,如果评估obj.is_x()返回真的吗?

这个坏主意(一般来说)?这段代码看起来不好吗?

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;
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*tep 7

  1. 不,由于短路,它不会.

  2. 是的,那段代码看起来很糟糕.不是因为它不正确,而是因为你将一个非常长的条件填充到单个if语句中.尝试重构代码以使其更清晰.