2017-03-22 126 views
3

我想爲C++數據類型編寫一個可靠的總結,但是我對新的數據類型有些困惑。C++ 11數據類型混淆

正如我從關於C++數據類型的閱讀中瞭解到的,char16_tchar_32_t是自C++ 11以來的基本數據類型和核心語言的一部分。

提及它們是截然不同的數據類型。

問題1:「獨特」究竟意味着什麼?

問題2:爲什麼intxx_t類型系列像int32_t被選爲不是基礎數據類型?如何選擇它們而不是int

回答

4

要回答的問題的第二部分:

的固定大小整數類型是從C,在那裏它們是遺傳typedef s。決定將它們保持爲typedefs是兼容的。請注意,C語言沒有重載函數,因此對「不同」類型的需求較低。

使用int32_t的一個原因是需要它的所要求的特性的一個或多個:

符號整型用的恰好 32位 沒有填充比特寬度並使用2的負值補。

如果您使用的是int,它可能是for example,它是36位,並使用1的補碼。

但是,如果您沒有非常具體的要求,使用正常的int將工作正常。一個優點是所有系統都可以使用int,而36位機器(或24位嵌入式處理器)可能根本沒有任何int32_t

3

charXX_t類型在N2249中引入。他們創造了作爲一個獨特的類型從uintXX_t允許超載:

定義char16_t是一個獨特的新的類型,具有相同的尺寸和代表性爲uint_least16_t。同樣,將char32_t定義爲一個不同的新類型,它具有與uint_least32_t相同的大小和表示形式。

[N1040定義char16_tchar32_t作爲類型定義到uint_least16_tuint_least32_t這使得重載上這些字符是不可能的。]

0

要回答你的問題1:

的不同數據類型是指std::is_same<char16_t,uint_least16_t>::value等於false

如此重載的功能是可能的。

(有一個在大小,符號性和對齊沒有區別,雖然。)