unsigned int flags = -1; // all bits are true
"이것이 이것을 달성하는 좋은 [,] 휴대용 방법입니까?"
가지고 다닐 수 있는? 예 .
좋은? 이 글타래에 표시된 모든 혼란에 의해 입증되는 논쟁의 여지가 있습니다. 동료 프로그래머가 혼동없이 코드를 이해할 수있을 정도로 명확하다는 것은 좋은 코드를 측정하는 차원 중 하나 여야합니다.
또한이 방법은 컴파일러 경고 가 발생하기 쉽습니다 . 컴파일러를 방해하지 않고 경고를 없애려면 명시 적 캐스트가 필요합니다. 예를 들어
unsigned int flags = static_cast<unsigned int>(-1);
명시 적 캐스트에서는 대상 유형에주의를 기울여야합니다. 대상 유형에주의를 기울이면 다른 접근 방식의 함정을 자연스럽게 피할 수 있습니다.
내 조언은 타겟 유형에주의를 기울이고 암시 적 변환이 없는지 확인하는 것입니다. 예를 들면 다음과 같습니다.
unsigned int flags1 = UINT_MAX;
unsigned int flags2 = ~static_cast<unsigned int>(0);
unsigned long flags3 = ULONG_MAX;
unsigned long flags4 = ~static_cast<unsigned long>(0);
모두 동료 프로그래머에게 정확하고 분명 합니다.
그리고 C ++ 11 을 사용 auto
하면 다음 중 하나를 더 간단하게 만들 수 있습니다 .
auto flags1 = UINT_MAX;
auto flags2 = ~static_cast<unsigned int>(0);
auto flags3 = ULONG_MAX;
auto flags4 = ~static_cast<unsigned long>(0);
나는 단순히 올바른 것보다 정확하고 명백한 것으로 생각합니다.