我怎样才能将类指针转换为像void*这样的通用指针?就像这段代码有效吗?
class CFoo
{
int a;
public:
CFoo():a(1){}
~CFoo(){}
getNum(){return a;}
};
void tfunc(void* data)
{
CFoo* foo = static_cast<CFoo*>(data);
std::cout << "Number: " << foo->getNum();
delete foo;
}
int main()
{
CFoo* foo = new CFoo;
void* dt = static_cast<void*>(foo);
tfunc(dt); // or tfunc(static_cast<void*>(food));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
这完全有效.以下是标准的说法:
§4.10指针转换
2类型为"指向cv的 指针"的rvalue
T,其中T是一个对象类型,可以转换为"指向cv的 指针void" 类型的右值.一个"指针转换的结果CVT"发送给"指针CVvoid"指向其中类型的对象的存储位置的起始T驻留,因为如果对象是类的一个最派生对象(1.8)T(即,不是基类子对象).
这意味着您可以将指向class的指针转换为void指针.而......
§5.2.9静态施法
10"指向cv的 指针
void" 类型的右值可以显式转换为指向对象类型的指针.转换为"指向cv的 指针void"并返回原始指针类型的对象的类型指针值将具有其原始值.
这意味着您可以使用static_cast将void指针转换回原始类指针.
希望能帮助到你.祝好运!
在C++中,您不需要静态强制转换来 void*:
int main()
{
CFoo* foo = new CFoo;
void* dt = foo;
tfunc(dt); // or tfunc(foo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:你的实现tfunc()是非常正确的,因为它确实需要强制转换.
| 归档时间: |
|
| 查看次数: |
26060 次 |
| 最近记录: |