Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

switch case C++

#cpp #строки #switch


Почему этот код не работает? Неужели в C++ switch не принимает тип string это же
чушь какая-то.

string text;
cin>>text;
switch(text){
    case "n":
        std::cout << "Some output";
        break;
    default:
        std::cout<<"Input incorrect!";
        break;
}
return 0;

    


Ответы

Ответ 1



string нельзя использовать в switch. Кажется, char* можно, но бесполезно. А вот char - вполне пойдёт, правда, в таком случае все строки, начинающиеся на n будут подходить под условие. string text; cin>>text; switch (text[0]) { case 'n': std::cout << "Some output"; break; default: std::cout<<"Input incorrect!"; break; } return 0;

Ответ 2



6.4.2 стандарта: Оператор switch вызывает передачу управления на один из нескольких операторов, в зависимости от значения условия. Условие должно иметь целочисленный тип, перечислимый тип или классовый тип. Если условие имеет классовый тип, то оно контекстуально неявно преобразуется (глава 4) в целочисленный или перечислимый тип. Если тип условия (возможно, преобразованный) подлежит целочисленным расширениям (4.5), то значение преобразуется к расширенному типу. Как вы понимаете, string не целочисленное, не перечислимый тип и нет неявного преобразования в таковой :) Вообще-то switch - не синтаксический сахар для if-elseif-else, у него своя специфика, связанная с производительностью ("По-моему, так" (с) Пух :))

Ответ 3



Да, именно так, в С++ конструкция switch / case может оперировать только с целыми числами, енумераторами, или классами, приводимыми к целому типу, или енумератору: 9.4.2 The switch statement [stmt.switch] 2 The condition shall be of integral type, enumeration type, or class type. If of class type, the condition is contextually implicitly converted (Clause 7) to an integral or enumeration type. If the (possibly converted) type is subject to integral promotions (7.6), the condition is converted to the promoted type. Any statement within the switch statement can be labeled with one or more case labels as follows: case constant-expression : where the constant-expression shall be a converted constant expression (8.20) of the adjusted type of the switch condition.

Комментариев нет:

Отправить комментарий