我正在开发一个迁移32位C++
代码的项目,以便在Mac OS X
上同时使用32位和64位模式。我在某些事情上感到困惑。例如,请考虑以下代码行 -
long* buffer = new long[VAL];
long var = buffer[0];
现在,我知道sizeof(long)
将返回32位的4
和64位的8
。所以,我很困惑一般应该替换上面两行,以便这些行在32位和64位模式下都能正常工作。
这可能听起来像是一个微不足道的问题,但我无法在我正在进行的项目中充实的这类问题上取得任何进展。
答案 0 :(得分:2)
我很困惑一般应该替换上面两行,以便这些行在32位和64位模式下都能正常工作。
答案取决于“正确工作”的含义。
如果您希望使用特定大小的整数(即所有平台上的32位或所有平台上的64位),请使用<cstdint>
:int32_t
中的定义32位,int64_t
为64位。无论平台如何,这都将确保精确的尺寸。
如果您需要的只是您自己程序中的互操作性,您可以将所有内容保留原样:在最短long
平台上没有溢出的情况下,程序将在平台上执行相同的操作使用更长的long
,除了需要更多的内存。