상수 값들의 집합이나 이러한 값들의 임의의 조합을 나타내는 데 사용할 수 있는 타입을 정의합니다. 이 특성은 일반적으로 정수 타입,
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
을 충족합니다:
특정 구현 옵션(예:
int
n
=
std::
ios_base
::
hex
)에 의존하는 코드는 이식성이 떨어집니다. 왜냐하면
std::ios_base::fmtflags
가 반드시
int
로 암시적으로 변환 가능한 것은 아니기 때문입니다.