使用 static_cast<> 对指针进行类型转换
Posted
技术标签:
【中文标题】使用 static_cast<> 对指针进行类型转换【英文标题】:typecasting a pointer with static_cast<> 【发布时间】:2014-09-02 11:08:40 【问题描述】:如果这是一个愚蠢的问题,请原谅,但我无法理解以下代码:
struct myStruct
static void func1(const event, void* pthis)
myStruct& foo = *static_cast<myStruct*>(pthis);
if(event.action != ...).... return;
if(event.action == ...) foo.func2();
void func2()
所以... pthis 被强制转换为 myStruct 类型的静态指针?这是否意味着 foo 的类型为“对 myStruct 的引用”,并且等于 pthis 指向的值。
本质上 foo 指向 myStruct,而无法访问 myStruct 的实例?
我真的不明白...
【问题讨论】:
*static_cast
在转换后确实取消引用
What are the differences between a pointer variable and a reference variable in C++?
为什么func1()
不接受myStruct
的引用?这个设计的目的是什么……我的脑袋实在想不通:(
【参考方案1】:
所以... pthis 被强制转换为 myStruct 类型的静态指针?
static_cast
与 static
变量无关。 Regular cast vs. static_cast vs. dynamic_cast 中解释了 static_cast
可用于将隐式转换反转为 void 指针。
本质上 foo 指向 myStruct,而无法访问 myStruct 的实例?
不,foo
没有“指向”任何东西。 foo
是绑定到由pThis
取消引用的对象的引用。 foo
可以像(*pThis)
一样调用成员方法。
【讨论】:
所以 foo 是一个引用,用来调用 myStruct 的成员函数。并且感谢 static_cast void 指针 pthis 可以用作任何类型的指针?以上是关于使用 static_cast<> 对指针进行类型转换的主要内容,如果未能解决你的问题,请参考以下文章
哪个演员更快 static_cast<int> () 或 int()