Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `char`, `signed char` dan `unsigned char` berkelakuan berbeza daripada `int` dan variannya dalam pengkhususan templat C?

Mengapakah `char`, `signed char` dan `unsigned char` berkelakuan berbeza daripada `int` dan variannya dalam pengkhususan templat C?

Susan Sarandon
Susan Sarandonasal
2024-10-26 19:01:30308semak imbas

Why do `char`, `signed char`, and `unsigned char` behave differently from `int` and its variants in C   template specializations?

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:

  • isX::ikIsX (untuk aksara yang ditandatangani )
  • isX::ikIsX (untuk aksara yang tidak ditandatangani)
  • isX::ikIsX (untuk aksara biasa)

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn