在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
What is a good example of leveraging the differences between int*_t, int_fast*_t and int_least*_t in C++11?
根据在线文档,这些固定宽度的整数类型之间存在差异。对于int*_t
我们将宽度固定为*
的值。然而,对于其他两种类型,描述中使用形容词最快和最小来请求基础数据模型提供的最快或最小实例。
最快"或"最小"的客观含义是什么?在哪些方面这样做是有利的,甚至是必要的?
"最快"没有客观含义;它基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不总是最快的(例如,如果 10 亿个条目数组是 8 位值,则处理速度可能会更快,但uint_fast8_t
可能是 32 位值,因为 CPU 寄存器操作对于该大小进行得更快(。
最小">通常意味着"与请求的位大小相同",但在可供选择的大小值有限的奇怪架构上(例如,旧的 Crays 将所有内容都作为 64 位类型(,int_least16_t
可以工作(并无缝成为 64 位值(,而编译器可能会在int16_t
出错(因为不可能在那里制作真正的 16 位整数值(。
要点是,如果您依赖于溢出行为,则需要使用精确的固定宽度类型。否则,您可能应该默认为least
类型以获得最大的可移植性,在热代码路径中切换到fast
类型,但需要分析来确定它是否真的有任何区别。
相关文章:
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 很好的语法来获取对向量/数组数据的大小引用?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 尽管一切看起来都很好,但值不会交换
- 为什么不同类型层次结构的指针之间的dynamic_cast定义得很好?
- 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 为什么指标有时效果很好,有时效果不佳?写下霍夫曼代码
- Red Hat:使用<atomic>编译很好,但链接器找不到__atomic_store_16;什么库?
- 使用移位的无符号数字作为数组的索引号是一种很好的做法
- 是否很好地使用状态模式来维护当前选定的对象?
- C++|以一种很好的方式将树(不一定是二进制的)打印到stdout
- 静态库单独使用很好,但在引用时会抛出错误
- 如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 为什么"int & const" MSVC 编译得很好?
- 当我使用可变参数时,它可以很好地处理int和double,但当涉及到float时,会发生错误
- 为什么' int; '在C语言中可以很好地编译,但在c++中却不能
- STL 排序不能很好地对我的向量<对<int,int> >进行排序