我遇到了下面这段丑陋的代码,想知道标准是否对此有规定。调用foo()函数是否被认为是导致未定义行为?还是无害的?
#include <iostream>
class Base {};
class Derived : public Base {};
void foo(Base *&b)
{
std::cout << "foo" << std::endl;
}
int main()
{
Derived *der = new Derived();
foo((Base *&)der);
return 0;
}
我认为使用丑陋的C风格强制类型转换是因为简单的 (Base *) 转换会导致编译错误。即使现在它能够编译,是否只是因为严格别名规则?或者引用类型的强制类型转换符合标准吗?
Derived
有多个基类,并且您将其转换为不位于对象开头的基类,会发生什么。 - sklott