我正在尝试为C ++数据类型编写一个可靠的摘要,但我对新数据类型有些疑惑。
从我对C ++数据类型的读数中可以理解,char16_t
和char_32_t
是基础数据类型,是C ++ 11以来核心语言的一部分。
提到它们是不同的数据类型。
Q1:究竟做了什么" distinct"这意味着什么?
Q2:为什么intxx_t
类型系列int32_t
被选为不是基本数据类型?在选择它们而不是int
时,它们如何有益?
答案 0 :(得分:4)
回答问题的第二部分:
固定大小的整数类型继承自C,它们是typedef
s。决定将它们保持为typedef
以便兼容。请注意,C语言没有重载功能,因此需要" distinct"那里的类型较低。
使用int32_t
的一个原因是您需要一个或多个必需属性:
有符号整数类型,宽度正好 32位 没有填充位,使用2的补码表示负值。
如果您使用int
,for example可能是36位并使用1&#39。补充。
但是,如果您没有非常特定的要求,则使用正常的int
将正常工作。一个优点是所有系统都可以使用int
,而36位机器(或24位嵌入式处理器)可能根本没有int32_t
。
答案 1 :(得分:3)
charXX_t
中引入了uintXX_t
类型。它们是作为char16_t
的不同类型创建的,以允许重载:
将
uint_least16_t
定义为一种独特的新类型,其大小和表示形式与char32_t
相同。同样,将uint_least32_t
定义为不同的新类型,其大小和表示形式与char16_t
相同。[N1040将
char32_t
和uint_least16_t
定义为uint_least32_t
和isLoggedIn
的类型定义,会使这些字符无法重载。]
答案 2 :(得分:1)
表达“不同类型”的另一种方法是您可以为每种类型创建两个重载函数。例如:
typedef int Int;
void f(int) { impl_1; }
void f(Int) { impl_2; }
如果您尝试编译包含两个函数的代码片段,则编译器将抱怨违反ODR:由于它们的参数相同,因此您试图两次重新定义相同的函数。这是因为typedef
不会创建类型,只是别名。
但是,当类型真正不同时,两个版本将被编译器视为两个不同的重载。
答案 3 :(得分:0)
回答你的问题:
不同类型意味着std::is_same<char16_t,uint_least16_t>::value
等于false
。
因此可以重载功能。
(但是,大小,签名和对齐没有区别。)