gpt4 book ai didi

c++ - 类型转换时 C++ 中的 (void *)variable 和 (void *&) variable 有什么区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:53:32 24 4
gpt4 key购买 nike

How to print member function address in C++它使用 (void *&) 对变量进行类型转换,我曾尝试使用 (void *),但它有问题。我要问的是类型转换时 C++ 中 (void *)variable 和 (void *&) variable 之间的区别。链接中的代码片段:

void TestClass::PrintMyFuncAddress(void)
{
void (TestClass::* ptrtofn)() = &TestClass::MyFunc;
cout << (void*&)ptrtofn<< endl;
}

最佳答案

void* 转换尝试将 ptrtofun 的值转换为 pointer-to-void 类型的值。 C++ 不提供从指针到成员函数到 void* 的这种转换,这就是它有问题的原因(可能它无法编译)。

void*& 转换创建了一个引用,其引用对象是从对象占用的第一个字节开始的第一个 sizeof(void*) 个内存字节 ptrtofnptrtofun 没有类型 void* 或兼容类型,甚至不需要与 void* 大小相同。因此使用引用具有未定义的行为(这违反了严格的别名)但编译器不需要捕获问题。

可移植地打印指向成员函数的指针的唯一方法是从 (unsigned char*)(&ptrtofun) 开始打印 sizeof(ptrtofun) 个字节.您可以自己决定要如何表示这些字节(显而易见的选择是十六进制),但请注意,结果不一定 TestClass 的代码在内存中的地址: :MyFunc。指向成员函数的指针根本不会那样工作,因为例如它们需要允许指向虚函数的指针,该函数将根据调用它的对象的动态类型调用不同的代码。

关于c++ - 类型转换时 C++ 中的 (void *)variable 和 (void *&) variable 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13200064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com