c++ - 在为 Windows 和 Linux 编写的程序中是否有必要处理长数据类型?

标签 c++

根据64位系统中的cpp引用:

    LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit)
        Win64 API 
    LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit) 
        Unix and Unix-like systems (Linux, Mac OS X) 

那么针对Linux和Windows编写的代码如何考虑长数据类型呢?

最佳答案

  1. 在 C 和 C++ 中,在可移植代码中,您永远不知道 int 这样的类型的确切大小。或 long int .如果将代码移至不同的编译器(或不同的机器或不同的操作系统),某些类型的大小可能会发生变化。这不一定是个问题;事实上,如果你想让它成为一个问题,它只是一个问题。 (所有这一切一直都是如此,与某人对“LLP64”和“LP64”架构系列的定义无关。)
  2. 在那些(希望很少见的)情况下,当你需要一个精确大小的类型时,一个好的方法是使用像 int32_t 这样的类型。和 uint64_t来自 <cstdint> (或 C 中的 <stdint.h>)。
  3. 但大多数情况下,您真的、真的不需要指定类型的确切大小。 (有些人说您需要指定每种类型的确切大小,但我的建议是忽略这些人。)
  4. 几乎唯一需要指定确切大小的情况是在尝试定义可以以“二进制”方式读写以符合某些外部强加的存储布局的结构时。但在那里,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,您最好还是编写明确的序列化和反序列化代码(或者使用“文本”数据格式,如果可以的话)。
  5. 我的底线是我很少担心类型的确切大小。

关于c++ - 在为 Windows 和 Linux 编写的程序中是否有必要处理长数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753750/

相关文章:

c++ - 从 C++ 中的函数返回继承类的最佳方法

c++ - 在 C++ 方法中创建模板类?

c++ - Windows GDI 上下文 - LoadImage

c++ - fontconfig 找不到字体

c++ - 64 位 Linux 上的链接不正确

c++ - Ankerl快速指数算法简单解释

c++ - 在函数中打开文件并在 main 中使用它

c++ - openmpi 编译器之间有什么区别?

c++ - 在 C++ 中为 OSX 创建共享库

c++ - C++ Builder 的 .NET 等效功能