"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 'char', 'signed char', 'unsigned char'은 C++에서 정말 구별되나요?

'char', 'signed char', 'unsigned char'은 C++에서 정말 구별되나요?

2024-11-05에 게시됨
검색:343

  Are `char`, `signed char`, and `unsigned char` Truly Distinct in C  ?

C의 문자 유형: 고유하거나 동등한가?

C에서 문자 유형(문자)의 동작은 때때로 C의 동작과 다를 수 있습니다. 부호 있는 정수와 부호 없는 정수로 인해 혼란이 발생합니다. 특히 다음 코드는 이러한 차이점을 보여줍니다.

#include 

typedef   signed char       int8;
typedef unsigned char      uint8;

struct TrueType {};
struct FalseType {};

template 
struct isX
{
   typedef typename T::ikIsX ikIsX;
};

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

template  bool getIsTrue();
template            bool getIsTrue() { return true; }
template            bool getIsTrue() { return false; }

int main(int, char **t )
{
   cout ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() 

이 코드는 컴파일되지만 char에 대해서는 int8 및 uint8과 다른 결과를 생성합니다. 이는 C가 char, signed char 및 unsigned char를 세 가지 고유한 유형으로 처리하기 때문입니다.

반면에 int와 uint32는 동일한 유형입니다.

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

이러한 구별은 char이 역사적으로 문자를 표시하고 숫자 값을 저장하는 데 사용되었다는 사실에서 비롯됩니다. 결과적으로 C는 일반 char를 int와 구별되는 별도의 유형으로 처리하여 이전 버전과의 호환성을 유지합니다.

char가 사용하는 두 가지 표현 중 어느 것을 결정하기 위해 구현에 정의된 typedef char_traits::signed는 다음과 같습니다. 제공됩니다. 이것이 true이면 char은 부호 있는 유형으로 작동합니다. 그렇지 않으면 부호 없는 유형으로 동작합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3