指向void
回答
根本就使用void*
的原因(无论const
与否)都是它提供的通用性。它就像一个基类:所有指针都是void*
并且可以隐式投射到它中,但是从void*
转换为类型化指针必须明确和手动完成。
通常,C++有更好的方法来提供这样的操作(即OO和模板),所以除了当你连接C时,使用void*
没什么意义。但是,如果你使用它,那么const
就提供了它在其他地方提供的内容:您需要一个(附加的)const_cast
才能够更改所引用的对象,因此您不太可能意外更改它。
当然,这依赖于你不使用C风格的转换,而是明确的C++转换。从void*
到任何T*
的剧组都需要static_cast
,并且这不允许删除const
。因此,您可以使用static_cast
将const void*
投射到const char*
,但不投射到char*
。这将需要额外的const_cast
。
很好的答案,但我认为这不是问题。这是const和非const版本之间的区别。 – 2010-09-14 10:18:09
我相信从'void *'强制转换为'T *'需要'static_cast'。 'reinterpret_cast'总是实现定义的,应该避免。 – 2010-09-14 10:21:02
我认为OP知道'const'的含义,他只是说他不明白'const void'的具体含义。所以我认为这是一个很好的答案。顺便说一下,'reinterpret_cast'的使用很好。 – Gorpik 2010-09-14 11:27:10
有一个简单的区别。正如其他人所说,由于C++有更好的类型系统,模板等,所以很少需要在C++中使用void*
。但是,当连接到C或系统调用时,有时需要一种方法来指定没有已知类型的值。
至于你问,void*
和const void*
之间的区别是向您展示,如果尖存储器的内容将你打电话时,const
这意味着将有一个只读访问的函数中被修改的提示。
在C++中,指针前面的const表示指针地址处的数据不应该改变。即停止有人这样做:
int v1 = 3;
int v2 = 4;
const int *pv = &v1;
pv = &v2 // ok;
*pv = 5; // error
您也可以使指针值本身就是一个常量:
int v1 = 3;
int v2 = 4;
int * const pv = &v1;
*pv = 5; // ok
pv = &v2; // error
您也可以将二者结合起来:
int v1 = 3;
int v2 = 4;
const int * const pv = &v1;
*pv = 5; // error
pv = &v2; // error
- 1. 在C++中指向void的指针?
- 2. 使用void函数指向数组
- 3. c,将void *指向的值赋给void * array
- 4. 绑定void *指向C++/Cli基本类型指针的指针
- 5. void指针
- 6. C++ void指针
- 7. 如何将void(__thiscall MyClass :: *)(void *)转换为void(__cdecl *)(void *)指针
- 8. 将指针指向CLR类型以使用不安全的void *
- 9. 在C++中投射一个指向易失性void **的指针
- 10. 类的指针void *
- 11. 指向指向int参数并返回void的函数的指针数组的指针
- 12. void表达式的无效使用;从void指针指向的数组复制信息;到char指针所指向的数组中
- 13. 特殊指针值((void *)1)
- 14. void *与char *指针算术
- 15. 右键投给void *指针
- 16. cpp make_shared for void指针
- 17. 追加两个void *指针
- 18. 算术运算void *指向数值数据
- 19. 声明一个指向二维数组的void *
- 20. 将void *指向char *转换为C++中的std :: string
- 21. 是否可以在C++中声明指向模板函数的void指针?
- 22. 函数期望参数并返回指向void函数的指针
- 23. 如何将指向动态数组的指针传递给void函数?
- 24. Void指向类对象的指针:函数内部的初始化
- 25. 如何将void(*)()类型的指针转换为void *
- 26. 在数组函数指针中调用void void
- 27. C void *函数指针参数
- 28. 返回void的C++/C函数指针*
- 29. 在void *指针中引用问题?
- 30. void指针函数的输出
什么明显不同? – 2010-09-14 10:11:51
我的意思是说'const void *'有意义吗? – Chubsdad 2010-09-14 10:13:42
是的,它是一个指向未知类型的不可变对象的指针。 – 2010-09-14 10:24:17