Почему этот код не работает? Неужели в C++ switch не принимает тип string это же чушь какая-то.
string text;
cin>>text;
switch(text){
case "n":
std::cout << "Some output";
break;
default:
std::cout<<"Input incorrect!";
break;
}
return 0;
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;
6.4.2 стандарта:
Оператор switch вызывает передачу управления на один из нескольких операторов, в зависимости от значения условия.
Условие должно иметь целочисленный тип, перечислимый тип или классовый тип. Если условие имеет классовый тип, то оно контекстуально неявно преобразуется (глава 4) в целочисленный или перечислимый тип. Если тип условия (возможно, преобразованный) подлежит целочисленным расширениям (4.5), то значение преобразуется к расширенному типу.
Как вы понимаете, string
не целочисленное, не перечислимый тип и нет неявного преобразования в таковой :)
Вообще-то switch
- не синтаксический сахар для if-elseif-else, у него своя специфика, связанная с производительностью ("По-моему, так" (с) Пух :))
Да, именно так, в С++ конструкция 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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как сделать графический секудомер и добавить его в оконное приложение?
Есть метод, который получает данные из json и создает Observable<>, из него мне нужно получить данные и сохранить в List<>: