2015-01-24 3 views
-4

Учитывая следующую последовательностьКак оператор switch сравнивает значения?

switch(1) { 
    case 1: 
     cout << "first \n"; 
    case 2: 
     cout << "second \n"; 
    default: 
     cout << "Not first nor the second"; 
} 

выход

first 
second 
Not first nor the second 

Я ожидаю, что выход будет

first 

так, как сравниваются значения? Я знаю, что не использовал break заявление, но разве это не просто спасение процессора? Почему второй случай выполняется, поскольку существуют два разных целочисленных значения? Что мне не хватает?

Я использую gcc 4.9.2 с флагом -std = C++ 11.

+0

Вы упускаете 'перерыв,' в конце каждого '/ default' блока случае. –

+0

Не отвечает ли ваш код на собственный вопрос? – juanchopanza

+1

Прочитайте определение оператора 'switch'. В нем указано, что обработка начинается с соответствующей метки и продолжается до тех пор, пока не будет выполнен «разрыв» или конец блока «switch». У вас нет перерывов, поэтому выполняется весь блок. – CiaPan

ответ

2

Если вы не используете break, код просто продолжается. Я думаю, что это похоже на ярлык GOTO в этом смысле. Есть законное использование для опуская break заявления, например, когда вы хотите сделать or ...

switch(val) { 
    case 1: 
    case 2: 
    // if val is 1 or 2... 
    break; 
    case 3: 
    // if val == 3; 
    break; 
} 
Смежные вопросы