char, signed char, unsigned char 간 동작 차이
아래 코드는 성공적으로 컴파일되지만 char은 정수형과 다르게 동작합니다.
cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl;
결과는 int8, uint8 및 char의 세 가지 유형에 대한 세 가지 인스턴스화 패턴입니다. 왜 이런 일이 발생합니까?
정수에는 동일하지 않습니다. int와 uint32는 하나의 패턴 인스턴스화를 생성하고 signed int는 다른 패턴 인스턴스화를 생성합니다.
이유는 아마도 C가 char을 처리하기 때문일 것입니다. 부호 있는 문자와 부호 없는 문자를 세 가지 다른 유형으로 나눕니다. int는 signed int와 동일합니다. 이것이 사실인가요, 아니면 제가 뭔가를 놓치고 있는 걸까요?
<code class="cpp">#include <iostream> using namespace std; typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; typedef signed long long int64; typedef unsigned long long uint64; struct TrueType {}; struct FalseType {}; template <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; // Это int==int32 неоднозначно //template <> struct isX<int > { typedef FalseType ikIsX; }; // Ошибка template <> struct isX<int32 > { typedef FalseType ikIsX; }; template <> struct isX<uint32 > { typedef FalseType ikIsX; }; // Почему это не двусмысленно? char==int8 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 << sizeof(int8) << endl; // 1 cout << sizeof(uint8) << endl; // 1 cout << sizeof(char) << endl; // 1 cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl; cout << getIsTrue< isX<int32>::ikIsX >() << endl; cout << getIsTrue< isX<uint32>::ikIsX >() << endl; cout << getIsTrue< isX<int>::ikIsX >() << endl; }
G 4.something을 사용하고 있습니다
위 내용은 다음은 귀하가 제공한 기사 내용을 기반으로 생성된 영어 질문과 답변 제목입니다. `char`, `signed char` 및 `unsigned char`을 비교할 때 `char`가 템플릿 인스턴스화의 정수 유형과 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!