请考虑以下代码:
struct base {};
struct derived : public base {};
int main() {
derived d = {};
derived* ptr_d = &d;
derived*& ref_ptr_d = ptr_d;
base*& ref_ptr_b = static_cast<base*&>(ref_ptr_d); // this won't compile
(void) ref_ptr_b;
return 0;
}
为什么ref_ptr_d
被解释为derived*
而不是derived*&
并且演员表无效?
我可以在 MSVC 和 gcc 编译器上重现它。