Namespaces
Variants

C++ named requirements: BitmaskType

From cppreference.net
C++ named requirements

상수 값들의 집합이나 이러한 값들의 임의의 조합을 나타내는 데 사용할 수 있는 타입을 정의합니다. 이 특성은 일반적으로 정수 타입, std::bitset , 또는 추가적인 연산자 오버로드가 있는 열거형(범위 있는 및 범위 없는)에 의해 구현됩니다.

요구사항

비트마스크 타입은 유한한 수의 비트마스크 요소를 지원하며, 이는 비트마스크 타입의 서로 다른 0이 아닌 값들로, 임의의 쌍 Ci Cj 에 대해 Ci & Ci 가 0이 아니고 Ci & Cj 가 0이 되도록 합니다. 추가로, 값 0 은 설정된 값이 없는 빈 비트마스크를 나타내는 데 사용됩니다.

비트 연산자 operator & , operator | , operator ^ , operator~ , operator & = , operator | = , 그리고 operator ^ = 는 비트마스크 타입의 값에 대해 정의되며, 비트마스크 요소들이 서로 다른 정수 2의 거듭제곱인 경우 부호 없는 정수에 대한 해당 내장 연산자들과 동일한 의미를 갖습니다.

다음 표현식들은 올바른 형식이며 모든 BitmaskType 에 대해 다음과 같은 의미를 가집니다:

Expression Meaning
X | = Y 객체 X 에 값 Y 를 설정함
X & = ~Y 객체 X 에서 값 Y 를 지움
X & Y 결과가 0이 아니면 객체 X 에 값 Y 가 설정되어 있음을 나타냄

각각 표현 가능한 비트마스크 요소는 비트마스크 타입의 n inline (since C++17) constexpr 값으로 정의됩니다.

표준 라이브러리

다음 표준 라이브러리 타입들은 BitmaskType 을 충족합니다:

(C++17 이후)
(C++11 이후)
(C++17부터)

특정 구현 옵션(예: int n = std:: ios_base :: hex )에 의존하는 코드는 이식성이 떨어집니다. 왜냐하면 std::ios_base::fmtflags 가 반드시 int 로 암시적으로 변환 가능한 것은 아니기 때문입니다.