亲爱的参与者,您对这段代码有什么想说的:
#include <iostream>
class A {
public:
int x = 2020;
class B& GetInterface()
{
// ...
// Тут на самом деле делается нечто.
// Но это не важно для вопроса
return (B&)(*this);
}
};
class B : public A {
public:
void f()
{
std::cout << x << std::endl;
}
};
int main()
{
A a;
a.GetInterface().f();
return 0;
}
这里有未定义的行为吗?B如果类没有被覆盖的虚拟类函数A、数据——除了非虚拟函数之外什么都没有,这样的代码是否有效?
取消引用从 派生的引用时存在未定义的行为
GetInterface,因为该引用实际上并不引用类型的对象B。此类代码无效,无论B.