关于强制类型转换的疑问

2303191 2008-11-18 05:10:01
有个变量
CString w("dfsdf");
有个函数
void ccc(const void*);

为什么我调用这个函数的时候要这么转换类型??我看不懂

ccc((void*)(unsigned short*)w);

问题1,为什么不直接转换,而要2个转换??
问题2,关于这种要转换2次的强制类型转换,有什么规律可循????



...全文
81 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-11-18
  • 打赏
  • 举报
回复
人家骗你的
这样不行
CString我不晓得
string是肯定不行的
string是对象类型,也不行int类型的,是不能转化为指针类型的
void ccc(const void*){}
int main() {
string a("asdf");
ccc((void*)(unsigned short*)a);
}

这个代码根本就通不过

后面的问题也就不对了,基于错误的做法有规律?

当然除非有另外一个情况就是,CString里面定义了这个函数,类型转化操作符:
typedef unsigned short* US;
operator US() {
}
2303191 2008-11-18
  • 打赏
  • 举报
回复
为什么要先转换成LPSTR呢
帅得不敢出门 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hhyttppd 的回复:]
如果是MFC的CString, static_cast <void*>(w.GetBuffer(0)),
也可以使用类型转换static_cast <void*>((LPSTR)w)

问题1 需要两次转换是因为不能直接转换。
问题2 任何指针都可以转换为void*, 具体类型如果不是指针,则需要可以转化为指针。

另外,C++请尽量使用static_cast reinterpret_cast const_cast 和dynamic_cast
[/Quote]
up
cyj626 2008-11-18
  • 打赏
  • 举报
回复
====
hhyttppd 2008-11-18
  • 打赏
  • 举报
回复
如果是MFC的CString, static_cast<void*>(w.GetBuffer(0)),
也可以使用类型转换static_cast<void*>((LPSTR)w)

问题1 需要两次转换是因为不能直接转换。
问题2 任何指针都可以转换为void*, 具体类型如果不是指针,则需要可以转化为指针。

另外,C++请尽量使用static_cast reinterpret_cast const_cast 和dynamic_cast
alai5201987 2008-11-18
  • 打赏
  • 举报
回复
首先w是一个字符串,类型转换是必须的,
至于为什么要两次吗,
我也不懂,
学习了。
雪鹰翔天 2008-11-18
  • 打赏
  • 举报
回复
NO Know..

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧