以下是有问题的minimal, complete, verifiable example。 这不是关于如何改进此代码的问题。我想知道的是,该标准是否允许在条件之外使用短路运营商,如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;
}
这既适用于Visual Studio的2015年并没有gcc 5.1断言。
你认为这有什么特别的原因,可能被禁止? – user2357112
当然可以。尽管技术上这个*是一个条件表达式。但合法≠好。写出逻辑:'if(foo())bar();'。你写的不是惯用的C++。 –
@ user2357112当然,如果第二个子句没有返回一个值,它就是非法的。因此,短路操作员似乎需要返回一个值。如果没有任何东西可以返回,会发生什么? –