Редко пользуюсь оператором switch, хотя думал, что знаю как он работает. Обычно я обязательно пользуюсь break, и switch тогда работает ожидаемо. Но вот я сделал примитивный пример, в котором не могу понять что происходит.
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
int i=0;
switch (i)
{
case 0 : { std::cout << "0"; }
case 1 : { std::cout << "1"; }
default : { std::cout << "D"; }
}
return 0;
}
Что выведет этот пример?
Вначале я думал что «0».
Потом не смог найти внятного описания default - выполняется ли это условие только если не подошло ничего из остального, или просто выполняется если до него дошло дело. Я склонился к тому, что default выполняется просто если до него дошло дело (небыло никаких break). Поэтому результат должен быть «0D».
На деле на gcc результат будет таким: «01D».
Два вопроса в связи с этим:
- С какого перепугу в результате затесалось 1?
- Как же все-таки должно срабатывать default?