C의 문자 유형: 고유하거나 동등한가?
C에서 문자 유형(char)의 동작은 때때로 C의 동작과 다를 수 있습니다. 부호 있는 정수와 부호 없는 정수로 인해 혼란이 발생합니다. 특히 다음 코드는 이러한 차이점을 보여줍니다.
<code class="cpp">#include <iostream> typedef signed char int8; typedef unsigned char uint8; struct TrueType {}; struct FalseType {}; template <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; template <> struct isX<char > { typedef FalseType ikIsX; }; template <> struct isX<int8 > { typedef FalseType ikIsX; }; template <> struct isX<uint8 > { typedef FalseType ikIsX; }; template <typename T> bool getIsTrue(); template <> bool getIsTrue<TrueType>() { return true; } template <> bool getIsTrue<FalseType>() { return false; } int main(int, char **t ) { cout << getIsTrue< isX<char>::ikIsX >() << endl; cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; }</code>
이 코드는 컴파일되지만 char에 대해서는 int8 및 uint8과 다른 결과를 생성합니다. 이는 C가 char, signed char 및 unsigned char를 서로 다른 세 가지 유형으로 취급하기 때문입니다.
반면에 int와 uint32는 동등한 유형입니다.
<code class="cpp">template <> struct isX<int > { typedef FalseType ikIsX; }; template <> struct isX<unit32> { typedef FalseType ikIsX; };</code>
이러한 구별은 다음과 같은 사실에서 비롯됩니다. char은 역사적으로 문자를 표현하고 숫자 값을 저장하는 데 사용되었습니다. 결과적으로 C는 일반 char를 int와 구별되는 별도의 유형으로 처리하여 이전 버전과의 호환성을 유지합니다.
char가 사용하는 두 가지 표현 중 무엇을 사용하는지 확인하기 위해 구현에 정의된 typedef char_traits
위 내용은 `char`, `signed char`, `unsigned char`은 C에서 정말 구별됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!