【发布时间】:2014-09-05 02:37:37
【问题描述】:
根据 Visual Studio 2012 的 MSDN 文档,streamsize 定义如下:
#ifdef _WIN64
typedef __int64 streamsize;
#else
typedef int streamsize;
#endif
然而检查 iosfwd 的实际来源,定义似乎如下(注意没有条件):
typedef _Longlong streamsize;
这会导致 sizeof(streamsize) 返回 8 个字节,无论 Visual Studio 2012 中的 _WIN64 定义如何。
相比之下,在 Visual Sudio 2008 中,在 iosfwd 中有以下定义:
#ifdef _WIN64
typedef __int64 streamoff;
typedef __int64 streamsize;
#else /* _WIN64 */
typedef long streamoff;
typedef int streamsize;
#endif /* _WIN64 */
注意代码与文档匹配。
鉴于此信息,我的问题分为两部分:
1.) 对于 Visual C++ 2012,streamsize 的 MSDN 文档是否出错?
2.) 更大的问题:32 位应用程序的真正向后兼容性是否会慢慢下降?
谢谢!
【问题讨论】:
-
MSVC 总是会破坏主要版本之间的二进制兼容性。
标签: c++ visual-studio-2012 types typedef sizeof