我想爲C++數據類型編寫一個可靠的總結,但是我對新的數據類型有些困惑。C++ 11數據類型混淆
正如我從關於C++數據類型的閱讀中瞭解到的,char16_t
和char_32_t
是自C++ 11以來的基本數據類型和核心語言的一部分。
提及它們是截然不同的數據類型。
問題1:「獨特」究竟意味着什麼?
問題2:爲什麼intxx_t
類型系列像int32_t
被選爲不是基礎數據類型?如何選擇它們而不是int
?
我想爲C++數據類型編寫一個可靠的總結,但是我對新的數據類型有些困惑。C++ 11數據類型混淆
正如我從關於C++數據類型的閱讀中瞭解到的,char16_t
和char_32_t
是自C++ 11以來的基本數據類型和核心語言的一部分。
提及它們是截然不同的數據類型。
問題1:「獨特」究竟意味着什麼?
問題2:爲什麼intxx_t
類型系列像int32_t
被選爲不是基礎數據類型?如何選擇它們而不是int
?
要回答的問題的第二部分:
的固定大小整數類型是從C,在那裏它們是遺傳typedef
s。決定將它們保持爲typedef
s是兼容的。請注意,C語言沒有重載函數,因此對「不同」類型的需求較低。
使用int32_t
的一個原因是需要它的所要求的特性的一個或多個:
符號整型用的恰好 32位 沒有填充比特寬度並使用2的負值補。
如果您使用的是int
,它可能是for example,它是36位,並使用1的補碼。
但是,如果您沒有非常具體的要求,使用正常的int
將工作正常。一個優點是所有系統都可以使用int
,而36位機器(或24位嵌入式處理器)可能根本沒有任何int32_t
。
charXX_t
類型在N2249中引入。他們創造了作爲一個獨特的類型從uintXX_t
允許超載:
定義
char16_t
是一個獨特的新的類型,具有相同的尺寸和代表性爲uint_least16_t
。同樣,將char32_t
定義爲一個不同的新類型,它具有與uint_least32_t
相同的大小和表示形式。[N1040定義
char16_t
和char32_t
作爲類型定義到uint_least16_t
和uint_least32_t
,這使得重載上這些字符是不可能的。]
要回答你的問題1:
的不同數據類型是指std::is_same<char16_t,uint_least16_t>::value
等於false
。
如此重載的功能是可能的。
(有一個在大小,符號性和對齊沒有區別,雖然。)