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