reinterpret_cast std::function* 往返void*

reinterpret_cast std::function* to and from void*

当我通过转换它的地址 to/from void* 调用从主要可执行文件传递的 std::function 时,我在插件中遇到段错误。我可以在几行独立的行中重现该问题:

#include <iostream>
#include <functional>

int main()
{
    using func_t = std::function<const std::string& ()>;

    auto hn_getter = func_t{[]() {
        return "Hello";
    }};

    auto ptr = reinterpret_cast<void*>(&hn_getter);

    auto getter = reinterpret_cast<func_t*>(ptr);
    std::cout << (*getter)() << std::endl;   // Bang!

    return EXIT_SUCCESS;
}

即使我正在转换为原始类型,它仍然会出现段错误。谁能看出我哪里出错了?

你的问题的原因与转换无关,这是因为函数 return a const string &。您需要:

using func_t = std::function<const std::string ()>;

正如评论所说,const 这里没用,只是:

using func_t = std::function<std::string ()>;