char!=(signed char), char!=(unsigned char) [duplikat]
Dalam senario tertentu, C merawat char, char yang ditandatangani, dan char yang tidak ditandatangani sebagai jenis yang berbeza, tidak seperti int dan variannya. Tingkah laku ini berpunca daripada sifat jenis aksara dalam C , seperti yang digariskan oleh piawai C:
Plain char, signed char, and unsigned char are three distinct types.
Walaupun int lazimnya sinonim dengan signed int, char tidak mempunyai hubungan yang sama dengan signed char atau unsigned char . Ini bermakna pengkhususan templat untuk jenis ini akan dibuat secara berasingan.
Dalam kod yang disediakan, tiga pengkhususan templat dicipta:
Walau bagaimanapun, untuk int dan variannya, hanya satu pengkhususan templat dibuat kerana kesemuanya dianggap sebagai jenis yang sama melainkan dinyatakan secara eksplisit sebagai ditandatangani atau tidak ditandatangani.
Oleh itu, dalam contoh yang diberikan, output akan menunjukkan tiga nilai berbeza untuk isX::ikIsX jenis alias untuk int8, uint8 dan char, manakala ia akan menunjukkan hanya satu nilai untuk int32, uint32 dan int.
Perbezaan ini penting untuk difahami apabila bekerja dengan pengaturcaraan meta templat dan introspeksi jenis dalam C .
Atas ialah kandungan terperinci Mengapakah `char`, `signed char` dan `unsigned char` berkelakuan berbeza daripada `int` dan variannya dalam pengkhususan templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!