在条件外使用短路运算符是否合法?

Jon*_*Mee 2 c++ conditional short-circuiting logical-operators control-flow

以下是一个可疑的最小,完整,可验证的示例.这不是关于如何改进此代码的问题.我想知道的是标准是否容许在条件之外使用短路运算符,如下所示main.

enum weekday {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    WEEKDAY_SIZE
};

bool getWeekday(int index, weekday& result) {
    result = static_cast<weekday>(index);

    return index >= 0 && index < static_cast<int>(WEEKDAY_SIZE);
}

bool getName(weekday& index, string& result) {
    switch (static_cast<weekday>(index)) {
    case SUNDAY:
        result = "Sunday";
        break;
    case MONDAY:
        result = "Monday";
        break;
    case TUESDAY:
        result = "Tuesday";
        break;
    case WEDNESDAY:
        result = "Wednesday";
        break;
    case THURSDAY:
        result = "Thursday";
        break;
    case FRIDAY:
        result = "Friday";
        break;
    case SATURDAY:
        result = "Saturday";
        break;
    default:
        assert("Short Circut Failed");
        return false;
    }
    return true;
}

int main() {
    const int index = 0;
    weekday Weekday;
    string Name;

    getWeekday(index, Weekday) && getName(Weekday, Name);

    cout << Name << endl;
}
Run Code Online (Sandbox Code Playgroud)

这适用于Visual Studio 2015和gcc 5.1,无需断言.

Bat*_*eba 5

宽恕编码风格不是标准的工作.

你的写作没有错 getWeekday(index, Weekday) && getName(Weekday, Name);

您的代码的读者将知道,getName(Weekday, Name)如果getWeekday(index, Weekday)求值,将不会调用false.