2010-02-04 49 views
5

在C++中的任何数据类型的我可以执行以下操作:当我分配Type*void*进行哪种演员是从类型*为void *?

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

其中铸造?这是否与

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

或者是否有其他演员?

回答

4

它是一个标准指针转换。由于它是标准转换,因此不需要任何明确的转换。

如果您想通过明确的转换重现该转换的行为,那将是static_cast,而不是reinterpret_cast

定义为在5.2.9/2中给出的static_caststatic_cast可以执行所有可以隐式执行的转换。

2

它是同一个演员。任何指针都可以转换为空指针。

4

Type*void*隐式转换是可用的。您可以使用static_cast来阐明代码的意图。 对于反向你需要 reinterpret_cast

编辑:根据对反向也static_cast评论都可以使用。试过一段代码,它确实编译。不知道这一点,并总是使用reinterpret_cast从void *中施放。

4

这不是一个演员,这是隐式转换。演员根据定义是明确的。它不是一个演员比:

char c = 'a'; 
int i = c; 

是。