小编dba*_*ric的帖子

在C++中转换函数指针时的奇怪行为

我最近在C++中遇到了关于函数指针的行为,我无法完全理解.我向谷歌寻求帮助以及一些经验丰富的同事,但即使他们也无能为力.

以下代码展示了这种神秘行为:

class MyClass{
private:
    int i;

public:
    MyClass(): i(0) {}
    MyClass(int i): i(i) {}

    void PrintText() const { std::cout << "some text " << std::endl;}
};

typedef void (*MyFunction) (void*);

void func(MyClass& mc){
    mc.PrintText();
}

int main(){    
    void* v_mc = new MyClass;
    MyFunction f = (MyFunction) func; //It works!
    f(v_mc); //It works correctly!!!

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,首先我定义一个稍后将使用的简单类(特别是它的成员方法PrintText).然后,我将名称对象定义void (*) (void*)MyFunction- 指向具有一个void*参数且不返回值的函数的指针.

之后,我定义func()了接受MyClass对象引用并调用其方法的函数PrintText.

最后,魔术发生在主要功能上.我为MyClass返回指针的新对象动态分配内存void* …

c++ pointers casting function-pointers

16
推荐指数
2
解决办法
1573
查看次数

标签 统计

c++ ×1

casting ×1

function-pointers ×1

pointers ×1