这是我的代码。
class IService {
};
class X_Service {
public:
void service1() {
std::cout<< "Service1 Running..."<<std::endl;
}
};
int main() {
IService service;
auto func = reinterpret_cast<void (IService::*)()>(&X_Service::service1);
(service.*(func))();
return 0;
}
我不明白这是如何工作的。我没有继承 IService 也没有创建 X_Service 对象,但它可以工作。
有人可以解释一下吗?
最佳答案
您的困惑可能来自误解,因为某些东西可以编译并运行而不会崩溃,因此它“有效”。这不是真的。
有很多方法可以打破语言规则,仍然编写可编译和运行的代码。通过使用 reinterpret_cast
在这里并进行无效的转换,您违反了语言规则,并且您的程序具有未定义的行为。
这意味着它看起来可以工作,也可以崩溃,或者它可以做一些与你想要的完全不同的事情。
在您的情况下,它似乎有效,但它仍然是 UB 并且代码无效。
关于c++ - 我不小心调用了一个没有自己的类对象的成员函数。但这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357367/