数字类型的Typedef

时间:2016-10-13 18:48:41

标签: c++ typedef

我正在使用大型物理包Geant4来运行模拟。在该语言中定义了许多typedef,并在整个包中使用。

typedef double G4double;
typedef float G4float;
typedef int G4int;
typedef bool G4bool;
typedef long G4long;

我理解使用typedef将数字类型公开为特定于域的类型,因为这样可以提高可读性并允许在以后更改typedef(如果需要)。但是,在这种情况下,typedef非常广泛,不能用于此目的。

我还听说过typedef用于确保每种类型的一致比特大小,因为标准不保证sizeof(int)。在这种情况下不能这样,因为这些typedef始终存在,而不是在检查相关类型的大小后由脚本生成。

我可能还缺少哪些其他目的?

2 个答案:

答案 0 :(得分:0)

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

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

就个人而言,我从未听说有人需要这样做。如果需要特定尺寸,通常首先使用它们。但这并不意味着它没有发生。

答案 1 :(得分:0)

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

  1. 它允许您在不使xintxx_t类型浮动的情况下增强跨平台可移植性。
  2. 它允许您换出类型 - 可能在构建时。例如,如果您想要一个支持单浮点和双浮点精度的3D引擎,您可以声明由定义宏触发的typedef float MyLibraryFloat;typedef double MyLibraryFloat;
  3. 它可以帮助图书馆抽象。假设您有一个库作为几个不同库的前端,这些库具有(大多数)兼容的API。抽象类型可以提供帮助,尽管在这种情况下它通常不像typedef那么简单。
  4. 我认为最好的理由是第二个原因。如果您正在处理类型可能会根据编译器设置更改的情况,那么它绝对是最有用的。然而,第一种是常见的,特别是在较旧的C程序中。 OpenGL / GLUT为尺寸安全提供类型抽象。