Izz*_*zza 3 c++ casting void-pointers
我已经多次看到并使用了 C++,特别是在各种线程实现中。我想知道这样做是否有任何陷阱/问题?当我们强制转换为 void* 并再次返回时,有什么方法可能会遇到错误或未定义的条件吗?如果有这些问题,我们应该如何解决?
谢谢你。
我还没有看到void*
在 C++ 中进行过多的转换。这是 C 中的一种做法,而在 C++ 中则积极避免。
强制转换为void*
删除所有类型安全。
如果您使用reinterpret_cast
或static_cast
将指针类型转换void*
为相同的指针类型并返回相同的指针类型,则标准实际上可以保证结果将是明确定义的。
危险在于您可能会将 avoid*
转换为错误的类型,因为您不再确定正确的类型是什么。
我想知道这样做是否存在任何陷阱/问题?
在将背面转换为特定类型时,您需要绝对确定void*
,如果不这样做,您最终会出现未定义的行为和潜在的灾难。一旦使用,void *
您就会失去类型安全性。很难跟踪 avoid *
实际指向的类型,无法保证或确定它确实指向您要将其类型转换回的类型。
当我们转换为 void* 并再次转换回来时,有没有什么方法可以遇到错误或未定义的情况?
是的,就是文中提到的场景#1
。
如果出现此类问题我们该如何解决?
void *
完全避免在C++中使用,而是使用模板和继承。
在 C 语言中,在某些情况下你可能绝对需要它,但尽量将其使用保持在最低限度。
底线是,
C/C++ 允许你搬起石头砸自己的脚,这取决于你是否这样做。
归档时间: |
|
查看次数: |
5018 次 |
最近记录: |