상세 컨텐츠

본문 제목

[C++11] Strongly-typed enums

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 26. 15:38

본문

"Strongly-typed enums"는 C++11 이후에 도입된 기능으로 열거형(enum)의 새로운 형태를 나타낸다.

 

기존의 C 타입의 enum의 기존적인 문제였던 "암시적 변환", "기본 형식 지정 불가능", 그리고 "scope pollution"에 대한 문제를 해결하게 되었다.

#include <iostream>

// Specifying underlying type as `unsigned int`
enum class Color : unsigned int { Red = 0xff0000, Green = 0xff00, Blue = 0xff };

// `Red`/`Green` in `Alert` don't conflict with `Color`
enum class Alert : bool { Red, Green };

int main(void)
{
	Color c = Color::Red;
	switch (c) {
		case Color::Red:
			std::cout << "Red" << std::endl;
			break;
		case Color::Green:
			std::cout << "Green" << std::endl;
			break;
		case Color::Blue:
			std::cout << "Blue" << std::endl;
			break;
	}

	int err = c; // error -- implicit conversion is not available.
	int value = static_cast<int>(c); // OK
	return 0;
}

'C++ > Modern C++(11, 14, 17, 20)' 카테고리의 다른 글

[C++11] Type aliases  (0) 2023.08.26
[C++11] nullptr  (0) 2023.08.26
[C++11] Attributes  (0) 2023.08.25
[C++11] constexpr  (0) 2023.08.25
[C++11] Delegating Constructors  (0) 2023.08.25

관련글 더보기