首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numeric类型的Types

Numeric类型的Types
EN

Stack Overflow用户
提问于 2016-10-14 02:48:41
回答 2查看 152关注 0票数 0

我正在使用一个大型的物理软件包Geant4来运行模拟。在该语言中定义了许多typedefs,并在整个包中独占使用。

代码语言:javascript
复制
typedef double G4double;
typedef float G4float;
typedef int G4int;
typedef bool G4bool;
typedef long G4long;

我理解如何使用typedefs将数值类型公开为特定于域的类型,因为这提高了可读性,并允许在以后需要时更改typedefs。然而,在这种情况下,typedefs太过宽泛,以至于它们不能达到这个目的。

我还听说typedefs被用来确保每种类型的位大小一致,因为sizeof(int)不受标准的保证。在这种情况下,这是不可能的,因为这些typedefs总是存在,而不是由脚本在检查相关类型的大小后生成。

我还错过了什么其他的目的?

EN

回答 2

Stack Overflow用户

发布于 2016-10-14 03:05:45

有些库喜欢这样做,以保持代码的一致性。它们使用的所有类型(甚至基元类型)都以G4开头。

理论上,如果某个原语类型的大小导致问题,您可以在特定平台上重新定义这些类型。

就我个人而言,我从来没有听说过有人需要这样做。在需要特定大小的地方,通常首先使用它们。但这并不意味着它没有发生。

票数 0
EN

Stack Overflow用户

发布于 2016-10-14 03:07:04

我不可能说明为什么这个特定的库会这样做。然而,我已经在我的库中做了类似的事情,我可以给出几个原因,其中一些您已经提到:

  1. 它允许你增强跨平台的可移植性,而不会让xintxx_t类型到处浮动。
  2. 它允许你交换类型-可能是在构建时。举个例子,如果你想要一个同时支持单精度和双精度浮点数精度的3D引擎,你可以声明由define宏触发的typedef float MyLibraryFloat;typedef double MyLibraryFloat;
  3. 它可以帮助库抽象。假设您有一个库,它充当几个不同库的前端,这些库具有(大部分)兼容的API。抽象类型可以帮助实现这一点,尽管在这种情况下它通常不像typedef那么简单。

我认为最好的原因是第二个。如果您正在处理类型可能会根据编译器设置而更改的情况,那么它绝对是最有用的。但是,第一种情况很常见,尤其是在较旧的C程序中。OpenGL/GLUT为了大小安全对类型进行了抽象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40028729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档