类型转换void*到string

遇到一个类型转换的问题,当我试图将void*类型的a转化为string型的b时,这样写:

1 1 void *a;
2 2 string b;
3 3 b = (string)(*a); //错误

出现如下错误:

error: 'void*' is not a pointer-to-object type(void*不是指向对象的类型)

正确代码:

void *a;
string b;
b = *(string*)a;

将a先转化为string的指针然后解引用,赋值给b(对string指针的解引用获得的当然是string类型)。

揪根问底(C/C++):

  void*表示“空类型指针”,表示:任意类型的指针,或者该指针与一地址值相关,但是不清楚在此地址上的对象的类型。

  不能直接对void*类型解引用,因为不存在void类型的变量。

  void关键字表示“空类型”,表示不存在的意思,而非表示任意类型,因此可以用void修饰函数( void a(void); 表示函数无返回值,或者返回值为空 return; ,在函数形参位置表示函数没有形参),但不能用void修饰变量,也就是不能写语句 void a; ,不存在类型为void的东西。

  再进一步,为什么不能存在void类型的变量,或者说为什么在面对变量的时候,void就不能表示“任意类型”呢?

  我们知道C/C++是静态类型的语言,定义变量就会分配内存,然而不同类型的变量所占内存不同,如果定义一个任意类型的变量,如何为其分配内存?

  所以,C、C++中没有任意类型的变量。但是,所有指针类型的变量,无论是int*、char*、string*、Student*等等,他们的内存空间都是相同的,所以可以定义“任意类型的指针”,指针类型所占的内存与系统的寻址能力有关,例如32位系统占4字节,64位系统占8字节……

 

猜你喜欢

转载自www.cnblogs.com/qzwjer/p/11106401.html
今日推荐