在C ++中,对于任何数据类型,我都可以执行以下操作:
Type* typedPointer = obtain();
void* voidPointer = typedPointer;
当我将Type*
分配给void*
时会执行哪次演员?这与
Type* typedPointer = obtain();
void* voidPointer = reinterpret_cast<void*>( typedPointer );
还是其他演员?
答案 0 :(得分:4)
从Type*
到void*
隐式转换可用。您可以使用static_cast
来阐明代码的用意。 反过来说你需要 reinterpret_cast
编辑:根据相反的评论,也可以使用static_cast
。尝试了一段代码,它确实可以编译。不知道并且总是使用reinterpret_cast从空洞中投射*。
答案 1 :(得分:4)
它不是演员,而是隐式转换。根据定义,强制转换是明确的。它不再是演员:
char c = 'a';
int i = c;
是
答案 2 :(得分:4)
这是标准指针转换。由于它是标准转换,因此不需要任何显式转换。
如果您想使用显式广播来重现该转化的行为,那么它将是static_cast
,而不是reinterpret_cast
。
在5.2.9 / 2中给出static_cast
的定义,static_cast
可以执行可以隐式执行的所有转换。
答案 3 :(得分:2)
这是同一个演员。任何指针都可以强制转换为void指针。