Jenis Watak dalam C : Distinct or Equivalent?
Dalam C , tingkah laku jenis watak (char) kadangkala boleh berbeza daripada integer bertanda dan tidak bertanda, yang membawa kepada kekeliruan. Khususnya, kod berikut menunjukkan perbezaan ini:
<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>
Kod ini menyusun tetapi menghasilkan hasil yang berbeza untuk char daripada untuk int8 dan uint8. Ini kerana C menganggap char, signed char dan unsigned char sebagai tiga jenis yang berbeza.
Sebaliknya, int dan uint32 ialah jenis yang setara:
<code class="cpp">template <> struct isX<int > { typedef FalseType ikIsX; }; template <> struct isX<unit32> { typedef FalseType ikIsX; };</code>
Perbezaan ini berpunca daripada fakta bahawa char secara sejarah telah digunakan untuk mewakili aksara dan menyimpan nilai angka. Akibatnya, C mengekalkan keserasian ke belakang dengan menganggap biasa char sebagai jenis yang berasingan, berbeza daripada int.
Untuk menentukan yang mana antara dua representasi yang digunakan char, char_traits typedef pelaksanaan
Atas ialah kandungan terperinci Adakah `char`, `signed char` dan `unsigned char` Benar-benar Berbeza dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!