| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1811 人关注过本帖
标题:为什么reinterpret_cast也不能进行强制转换 ?
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:4 
为什么reinterpret_cast也不能进行强制转换 ?
对于
class TestClass {
public:
       void classFn2(void) { printf("classFn2\n"); }
} classTmp;

typedef void (__cdecl * VPF)(void);
VPF tt ;
不管使用
void *tt = (char*)classTmp.classFn2;  // failed
或者
#define TTT( a , b ) (a)=(b)
或者
unsigned int aaa = reinterpret_cast < unsigned int & > classTmp.classFn2;
以及memcpy( tt,(void*)classTmp.classFn2,4);,为什么一个都不能进行强制的复制呢?
搜索更多相关主题的帖子: cast reinterpret 
2010-08-06 23:11
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
D:\Program_Files\Microsoft Visual Studio\MyProjects\test\testStub.cpp(130) : error C2440: 'type cast' : cannot convert from 'void (__thiscall TestClass::*)(void)' to 'unsigned long'
        Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-09 23:50
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 3楼 pangding
__cdecl  指明参数压栈的顺序

__cdecl是C/C++和MFC程序默认使用的调用约定,也可以在函数声明时加上__cdecl关键字来手工指定。采用__cdecl约定时,函数参 数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定。

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-10 22:32
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用pangding在2010-8-10 01:45:20的发言:

gcc 给的提示是

不过我从来没这么写过代码。呵呵,属于诡异的用法吧~ 有空我研究研究吧,看看标准是怎么说的。


__cdecl 这个关键字以前经常在 VC 里看见,有什么用吗?
您研究的怎么样了?分享下吧 呵呵

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-14 12:41
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用pangding在2010-8-15 15:17:00的发言:

基本上 4 楼的就是研究之后的。标准里没找到相关的说法。
看来 gcc 没实现了的,就说是标准不让~~


我的建议就是别这么弄,你有什么特别的理由要这写吗?如果有我觉得就是设计不当,你可以说说看,我帮你分析分析是不是有更好的写法。
我只是想得到成员变量classTmp.classFn2 的地址而已,不知道有什么好方法?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-16 01:30
快速回复:为什么reinterpret_cast也不能进行强制转换 ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032357 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved