哪种演员阵容从Type *到void *?

时间:2010-02-04 08:31:09

标签: c++ visual-c++ pointers casting

在C ++中,对于任何数据类型,我都可以执行以下操作:

Type* typedPointer = obtain();
void* voidPointer = typedPointer;

当我将Type*分配给void*时会执行哪次演员?这与

相同
Type* typedPointer = obtain();
void* voidPointer = reinterpret_cast<void*>( typedPointer );

还是其他演员?

4 个答案:

答案 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指针。