char
, signed char
и unsigned char
- это три различных типа, даже если char
интерпретируется так же, как signed char
интерпретируется вашим компилятором.
§3.9.1 / 1 из стандарта C ++ говорит
Обычный символ, символ со знаком и символ без знака - это три различных типа.
Другими словами, не думайте о char
как о краткой форме signed char
, потому что это не так.
Чтобы подчеркнуть, что типы могут отличаться , несмотря на то, что их интерпретация битов одинакова , рассмотрим следующие две структуры:
struct A
{
int i;
};
struct B
{
int i;
};
Они такие же? Конечно, нет. Точно так же, char
и signed char
являются различными типами.
Попробуйте это:
cout << std::is_same<A,B>::value;