转换为void *作为方法参数

时间:2011-08-27 02:40:29

标签: c++

对于参数为void *的方法,C ++采用static / reinterpret_cast进行转换,或者这里有不同的机制吗?

void foo(void* p)
{
    // ... use p by casting it back to Base first, using static/reinterpret cast
}
Base* base(new Derived);
foo(base);       // at this exact line, is there a static/reinterpret_cast going on under the covers?

我在问,因为似乎一方面标准说对于c-style强制转换,C ++会去尝试C ++强制转换(静态,重新解释,const),直到找到有效的东西。但是,当调用带有void *参数的方法时,我无法找到合理的解释。在事物的面上没有演员,所以会发生什么?

1 个答案:

答案 0 :(得分:4)

在这种情况下,语言规范不会以static_castreinterpret_cast表示行为。它只是说指针base隐式转换void *类型。可以隐式执行的转换在C ++中称为标准转换。将任何对象指针类型转换为void *指针转换类别的标准转换之一。

确实,这是static_cast明确可以执行的转换,但static_cast在这种情况下完全不相关。 C ++中的标准转换“单独”工作,不涉及任何特定的转换操作符。

事实上,static_cast的行为是根据此类案件的标准转换定义的,而不是相反。