对于参数为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 *参数的方法时,我无法找到合理的解释。在事物的面上没有演员,所以会发生什么?
答案 0 :(得分:4)
在这种情况下,语言规范不会以static_cast
或reinterpret_cast
表示行为。它只是说指针base
是隐式转换到void *
类型。可以隐式执行的转换在C ++中称为标准转换。将任何对象指针类型转换为void *
是指针转换类别的标准转换之一。
确实,这是static_cast
明确可以执行的转换,但static_cast
在这种情况下完全不相关。 C ++中的标准转换“单独”工作,不涉及任何特定的转换操作符。
事实上,static_cast
的行为是根据此类案件的标准转换定义的,而不是相反。