[c++] switch문에서 정수 외의 다른 자료형 사용
C++의 switch 문은 정수형 값을 기반으로 한 조건 분기에 주로 사용됩니다. 하지만 C++11부터는 정수형 이외의 다른 자료형도 switch 문에서 사용할 수 있습니다.
정수형 이외의 자료형 사용하기
C++11에서는 switch 문에서 정수형 외의 자료형인 열거형 (enum), 문자열 (string), 또는 사용자 정의 객체 등을 사용할 수 있습니다.
열거형(enums) 사용하기
enum class Color { Red, Green, Blue };
Color color = Color::Green;
switch (color) {
case Color::Red:
// 빨강일 때 실행되는 코드
break;
case Color::Green:
// 초록일 때 실행되는 코드
break;
case Color::Blue:
// 파랑일 때 실행되는 코드
break;
default:
// 다른 경우 실행되는 코드
break;
}
문자열(string) 사용하기
C++11 이전에는 switch 문에서 문자열을 직접 사용할 수 없었지만, C++11에서는 std::string을 사용하여 문자열을 switch 문에서 사용할 수 있습니다.
#include <iostream>
#include <string>
int main() {
std::string fruit = "apple";
switch (hash<std::string>{}(fruit)) {
case hash<std::string>{}("apple"):
std::cout << "apple" << std::endl;
break;
case hash<std::string>{}("banana"):
std::cout << "banana" << std::endl;
break;
default:
std::cout << "other" << std::endl;
break;
}
return 0;
}
사용자 정의 클래스 또는 객체 사용하기
사용자 정의 클래스나 객체도 switch 문에서 사용할 수 있습니다. 그러나 해당 클래스나 객체는 비교 연산자 (==)를 오버로딩하여 비교 연산을 가능케 해야합니다.
자료형에 따른 제약 사항
다른 자료형을 switch 문에서 사용할 때, 각 case의 값은 상수만 가능합니다. 이는 switch 문의 동작 방식과 관련이 있습니다.
switch 문은 정수형을 기반으로 분기하기 때문에, 상수 값에 대한 판별이 가능해야 합니다.
결론
C++11부터는 switch 문에서 정수형 이외의 다른 자료형을 사용할 수 있게 되었습니다. 이를 통해 코드를 더욱 읽기 쉽고 유지보수하기 쉽게 만들 수 있습니다.
참고문헌: https://en.cppreference.com/w/cpp/language/switch