Условный оператор в выражении константы
Я попробовал следующий фрагмент кода с MSVC 10, где он работает нормально.
enum
{
FOO = (sizeof(void*) == 8 ? 10 : 20)
};
int main()
{
return FOO;
}
Что я хотел бы знать, так это: позволяет ли стандарт C++ (предпочтительно C++98) использовать условный оператор в константном выражении, когда все операнды являются константными выражениями, или это причуды / расширения Microsoft?
1 ответ
Решение
Это совершенно обоснованный и разумный стандарт C++.
Тернарный условный оператор формирует выражение, а выражение является константным выражением, если его операндами являются.
Стандартная ссылка C++11 5.19/2:
Условное выражение является основным константным выражением [...]
Обратите внимание, что согласно 5.16 тернарные условные выражения являются одним типом условных выражений. Другие типы такие вещи, как 2 == 3
,