我试图为C++数据类型编写一个可靠的摘要,但是对于新的数据类型我有些困惑。
正如我从有关C++数据类型的阅读资料中了解到的,char16_t和char_32_t是自C++11以来的基本数据类型和核心语言的一部分。
提到它们是不同的数据类型。
Q1:在这里“不同”到底是什么意思?
Q2:为什么选择像int32_t这样的intxx_t类型家族不是一种基本的数据类型?当选择它们而不是int时,它们怎么可能是有益的?
发布于 2017-03-22 10:35:51
要回答问题的第二部分:
固定大小的整数类型是从C继承而来的,其中它们是typedef的,因此决定将它们作为typedefs保持兼容。请注意,C语言没有重载函数,因此对“不同”类型的需求较低。
使用int32_t的一个原因是您需要它的一个或多个所需的属性:
带符号整数类型,宽度为32位,没有填充位,负值使用2的补码。
如果你使用一个int,它可能是,例如,是36位,使用1的补充。
但是,如果您没有非常具体的需求,那么使用普通的int就可以了。一个优点是,int可以在所有系统上使用,而36位机器(或24位嵌入式处理器)可能根本没有任何int32_t。
发布于 2017-03-22 09:39:16
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,的类型,从而使这些字符无法重载。
发布于 2017-03-22 09:52:23
要回答您的Q1:
不同类型意味着std::is_same<char16_t,uint_least16_t>::value等于false。
所以过载的函数是可能的。
(但在大小、签名和对齐方面没有差别。)
https://stackoverflow.com/questions/42947460
复制相似问题