cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

switch с диапазоном значений #342

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +22, -2 Автор идеи: Игорь Шаповал

Работая с switch мы иногда хотим, чтобы ветка выполнилась, если условия лежит

в диапазоне значений. Для этого мы должны писать следующее

switch (value) {
case 0:
case 1:
case 2:
   cout << "in range 0...2" << endl;
   break;
case 3:
case 4:
case 5:
   cout << "in range 3...5" << endl;
   break;   
default:
   cout << "out the range" << endl;
}

В GCC есть расширение, которое позволяет указывать в case диапазон значений

switch (value) {
case 0 ... 2:
   cout << "range in 0...2" << endl;
   break;
case 3 ... 5:
   cout << "range in 3...5" << endl;
   break;
default:
   cout << "out the range" << endl;
}

Было бы классно добавить в стандарт С++.

apolukhin commented 3 years ago

Игорь Шаповал, 28 августа 2018, 9:09 yndx-antoshkka Скажите может эта фича быть в стандарте?

valera_ee, 31 июля 2019, 9:02 Было бы совсем хорошо, если бы можно было указывать через запятую разные значения в case

switch (value) 
{
    case: 0, 7, 11:
        std::cout << "state 1";
        break;

    case: 1 ... 5, 8:
        std::cout << "state 2";
        break;

    default:
        std::cout << "default state";
        break;
}
apolukhin commented 3 years ago

Идея про паттерн матчинг, дубликат #239