64,684
社区成员
发帖
与我相关
我的任务
分享
GDALRasterBandH CPL_STDCALL GDALGetRasterBand( GDALDatasetH hDS, int nBandId )
{
VALIDATE_POINTER1(hDS, "GDALGetRasterBand", NULL);
return static_cast<GDALRasterBandH>(static_cast<GDALDataset *>(hDS)->GetRasterBand(nBandId));
您好,版主您第3条提到,void*类型的指针不可能可以调用到成员函数。但是在我的程序中,使用GDALDatasetH hSrcDs = GDALOpen() 创建一个hSrcDs 指针,该指针类型为void,是由类指针return 为void型指针的,即return一个类指针,但是GDALOpen() 函数原型返回值为void 指针。在这种情况下,hSrcDs 确实可以调用该类的成员函数啊,请问这是为什么? 1、任意类型的指针均可隐式转换为void*2、void*类型指针需要显示转换为其他类型指针,C语言编译器可能允许隐式转换,C++下不行3、void*类型的指针不可能可以调用到成员函数4、指针间类型转换通常只是表示用不同的类型去解释这块内存中的数据,所以正如你说的一个地址,但解释的内容不同,如果你将这块内存转换为double*,那么他就会按double去解释这块地址上的数据
[quote=引用 5楼zjq9931 的回复:][quote=引用 2 楼 levi888666 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。
1、任意类型的指针均可隐式转换为void* 2、void*类型指针需要显示转换为其他类型指针,C语言编译器可能允许隐式转换,C++下不行 3、void*类型的指针不可能可以调用到成员函数 4、指针间类型转换通常只是表示用不同的类型去解释这块内存中的数据,所以正如你说的一个地址,但解释的内容不同,如果你将这块内存转换为double*,那么他就会按double去解释这块地址上的数据
[quote=引用 2 楼 levi888666 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。
《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
[quote=引用 2 楼 levi888666 的回复:] [quote=引用 1 楼 zjq9931 的回复:] 只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。
只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。
[quote=引用 1 楼 zjq9931 的回复:] 只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。
[quote=引用 1 楼 zjq9931 的回复:] 只要指向的内容的结构是复合要求的,指针的类型完全可以随意转换。