首頁  >  文章  >  後端開發  >  為什麼 `char`、`signed char` 和 `unsigned char` 的行為與 C 模板特化中的 `int` 及其變體不同?

為什麼 `char`、`signed char` 和 `unsigned char` 的行為與 C 模板特化中的 `int` 及其變體不同?

Susan Sarandon
Susan Sarandon原創
2024-10-26 19:01:30308瀏覽

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) [重複]

在某些情況下,C 會對待char,與int 及其變體不同,signed char 和unsigned char 是不同的型別。此行為源自於 C 中字元類型的性質,如 C 標準所述:

Plain char, signed char, and unsigned char are three distinct types.

雖然 int 通常與signed int 同義,但 char 與signed char 或unsigned char 沒有相同的關係。這意味著這些類型的模板專業化將單獨實例化。

在提供的程式碼中,創建了三個模板專業化:

  • isX::ikIsX(用於簽名字元) )
  • isX ::ikIsX(對於無符號字元)
  • isX::ikIsX(對於普通字元)

但是,對於int及其變體,僅建立一個模板特化,因為除非明確指定為有符號或無符號,否則它們都被視為相同類型。

因此,在給定的範例中,輸出會顯示三個不同的值isX::ikIsX 是 int8、uint8 和 char 的型別別名,而 int32、uint32 和 int 只會顯示一個值。

在使用模板元程式設計和類型自省時,理解這一區別至關重要。 C .

以上是為什麼 `char`、`signed char` 和 `unsigned char` 的行為與 C 模板特化中的 `int` 及其變體不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn