gpt4 book ai didi

c++ - 我不小心调用了一个没有自己的类对象的成员函数。但这是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 13:15:51 25 4
gpt4 key购买 nike

这是我的代码。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com