char!=(signed char), char!=(unsigned char)
Soalan ini meneroka gelagat jenis data char dalam C berbanding jenis integer lain seperti int. Secara khusus, ia menangani pemerhatian bahawa char dianggap sebagai jenis yang berbeza daripada kedua-dua char yang ditandatangani dan char yang tidak ditandatangani.
Piawaian C mentakrifkan char, char yang ditandatangani dan char yang tidak ditandatangani sebagai tiga jenis yang berasingan. Walaupun mereka berkongsi jumlah keperluan penyimpanan dan penjajaran yang sama, perwakilan nilai dan corak bit adalah berbeza. Untuk jenis aksara yang tidak ditandatangani, semua corak bit mewakili nombor. Walau bagaimanapun, ini tidak semestinya benar untuk char atau char yang ditandatangani.
Kod contoh dalam soalan menunjukkan perbezaan tingkah laku ini. Apabila pengkhususan templat dibuat untuk int8 (char bertandatangan), uint8 (char tidak bertanda), dan char, tiga instantiasi berasingan dijana. Ini kerana pengkompil menganggap char sebagai jenis yang berbeza daripada dua yang lain.
Sebaliknya, apabila pengkhususan templat dibuat untuk int, int32 dan uint32, hanya satu instantiasi dijana untuk int dan int32 kerana ia adalah dianggap jenis yang sama. Signed int, walau bagaimanapun, dianggap sebagai jenis yang berasingan dan menjana pengkhususan templatnya sendiri.
Tingkah laku ini konsisten dengan standard C, yang menyatakan bahawa char, signed char dan unsigned char ialah tiga jenis yang berbeza. Oleh itu, adalah betul untuk menganggapnya sebagai jenis yang berbeza dalam pengkhususan templat.
Atas ialah kandungan terperinci Mengapakah char dianggap sebagai jenis yang berbeza daripada char yang ditandatangani dan char yang tidak ditandatangani dalam Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!