switch case C++

167
01 октября 2018, 12:50

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

string text;
cin>>text;
switch(text){
    case "n":
        std::cout << "Some output";
        break;
    default:
        std::cout<<"Input incorrect!";
        break;
}
return 0;
Answer 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;
Answer 2

6.4.2 стандарта:

Оператор switch вызывает передачу управления на один из нескольких операторов, в зависимости от значения условия.
Условие должно иметь целочисленный тип, перечислимый тип или классовый тип. Если условие имеет классовый тип, то оно контекстуально неявно преобразуется (глава 4) в целочисленный или перечислимый тип. Если тип условия (возможно, преобразованный) подлежит целочисленным расширениям (4.5), то значение преобразуется к расширенному типу.

Как вы понимаете, string не целочисленное, не перечислимый тип и нет неявного преобразования в таковой :)

Вообще-то switch - не синтаксический сахар для if-elseif-else, у него своя специфика, связанная с производительностью ("По-моему, так" (с) Пух :))

Answer 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.

READ ALSO
Проблемы с вывод при компиляцией под х86

Проблемы с вывод при компиляцией под х86

Есть простая функция которая возводит число в куб

185
Кнопка QPushButton

Кнопка QPushButton

Есть класс с унаследованной кнопой:

182
Помогите сделать секундомер на Java FX

Помогите сделать секундомер на Java FX

Как сделать графический секудомер и добавить его в оконное приложение?

451
Как мне из Observable&lt;io.rxjava&gt; сохранить данные в List&lt;&gt;?

Как мне из Observable<io.rxjava> сохранить данные в List<>?

Есть метод, который получает данные из json и создает Observable<>, из него мне нужно получить данные и сохранить в List<>:

178