Сегодня я случайно обнаружил, что мой компилятор не жалуется при написании кода внутри оператора switch без случая. (Он жаловался на отсутствие заявлений о делах, но после добавления одного после кода было не так много, как предупреждение, чтобы сообщить мне, что код бесполезен.)
Я пытаюсь выяснить, есть ли цель разрешить следующий код, или если это только одна из тех вещей, где "это больше работает, чтобы ограничить ее, поэтому она разрешена".
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int main()
{
for (int a = -10; a < 10; ++a)
{
switch(a)
{
foo();
case 4:
std::cout << "4" << std::endl;
}
}
}
Теперь он выводит "4", как ожидалось, когда a == 4, и он никогда не выводит foo. Итак, вопрос в том, есть ли какая-то (потенциально эзотерическая, но полезная) причина, чтобы допустить утверждение foo();
до первого случая? Я точно знаю, что мне запрещено объявлять и инициализировать переменные там.
(FWIW, я тестировал это на нескольких компиляторах, и все они приносят одинаковое поведение. Удивительно, но они также не выдают предупреждение.)