这段奇怪的给VC专用的代码是干什么的?
时间:2011-11-30
来源:互联网
代码源于Ogre::Singleton,是一个singleton基类。
为什么对于MSVC版本小于1200,就要在存地址的时候加上一个偏移?
只把相关部分列在这里:
C/C++ code
为什么对于MSVC版本小于1200,就要在存地址的时候加上一个偏移?
只把相关部分列在这里:
C/C++ code
namespace Ogre { template <typename T> class Singleton { protected: static T* ms_Singleton; public: Singleton( void ) { assert( !ms_Singleton ); #if defined( _MSC_VER ) && _MSC_VER < 1200 int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; ms_Singleton = (T*)((int)this + offset); #else ms_Singleton = static_cast< T* >( this ); #endif } };
作者: jiandingzhe 发布时间: 2011-11-30
1200是vc6的编译器版本号,ms先前的vc编译器类类型指针强制转换时,指针的值会发生变化(this指针调整?)。
木有见过vc6以前的编译器,瞎猜的。
木有见过vc6以前的编译器,瞎猜的。
作者: Demon__Hunter 发布时间: 2011-11-30
可能是1200以前的版本没有static_cast<>吧
作者: luciferisnotsatan 发布时间: 2011-11-30
引用 2 楼 luciferisnotsatan 的回复:
可能是1200以前的版本没有static_cast<>吧
可能是1200以前的版本没有static_cast<>吧
这个最有可能了
作者: Demon__Hunter 发布时间: 2011-11-30
引用 2 楼 luciferisnotsatan 的回复:
可能是1200以前的版本没有static_cast<>吧
可能是1200以前的版本没有static_cast<>吧
为啥没有static_cast就要偏移地址?
作者: jiandingzhe 发布时间: 2011-11-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28