Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中,利用int*\t、int\u fast*\t和int\u least*\t之间的差异的一个好例子是什么+;11?_C++_C++11_Integer_Fixed Width_Cstdint - Fatal编程技术网

C++ 在C+中,利用int*\t、int\u fast*\t和int\u least*\t之间的差异的一个好例子是什么+;11?

C++ 在C+中,利用int*\t、int\u fast*\t和int\u least*\t之间的差异的一个好例子是什么+;11?,c++,c++11,integer,fixed-width,cstdint,C++,C++11,Integer,Fixed Width,Cstdint,根据在线文档,这些固定宽度整数类型之间存在差异。对于int*\u t我们将宽度固定为*的值。然而,对于其他两种类型,描述中使用形容词faster和minimate来请求底层数据模型提供的最快或最小实例 “最快”或“最小”的客观含义是什么?在什么情况下,这样做是有利的,甚至是必要的?没有“最快”的客观含义;这基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不总是最快的(例如,如果是8位值,则10亿个条目数组的处理速度可能会更快,但uint_fast8_

根据在线文档,这些固定宽度整数类型之间存在差异。对于
int*\u t
我们将宽度固定为
*
的值。然而,对于其他两种类型,描述中使用形容词faster和minimate来请求底层数据模型提供的最快或最小实例


“最快”或“最小”的客观含义是什么?在什么情况下,这样做是有利的,甚至是必要的?

没有“最快”的客观含义;这基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不总是最快的(例如,如果是8位值,则10亿个条目数组的处理速度可能会更快,但
uint_fast8_t
可能是32位值,因为CPU寄存器对该大小的操作速度更快)

“最小”通常意味着“与请求的位大小相同”,但在具有有限大小值可供选择的怪异体系结构上(例如,旧Crays将所有内容都设置为64位类型),
int\u-least16\u-t
将起作用(并无缝地成为64位值),而编译器可能会在
int16\u-t
上出错(因为不可能在那里生成真正的16位整数值)

关键是,如果您依赖于溢出行为,则需要使用精确的固定宽度类型。否则,您可能应该默认为
least
类型以获得最大的可移植性,在热代码路径中切换到
fast
类型,但需要分析以确定它是否真的有任何区别