gpt4 book ai didi

c++ - 意外输出而不是运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:00 25 4
gpt4 key购买 nike

对于知道背景魔法的人来说这可能是显而易见的,但我无法理解下面的代码如何给出正确的输出。我预计会出现运行时错误。请帮忙。

class a
{
public:
void print()
{
cout<<"Hello\n"<<endl;
int d = 100;
cout<<d<<endl;
}

int val;
};


int main()
{
a* ptr;

ptr->print();

return SUCCESS;
}

输出如下:

Hello

100

最佳答案

没有魔法 - 您的代码有未定义的行为。在您的代码中,您不会访问作为 this 指针隐式传递给 print()ptr,这就是没有错误发生的原因。

在其他几种情况下可能会发生:

  • 访问 a 实例的字段。它将需要读取内存*(this + field_offset),这将导致运行时错误。

  • 访问虚拟方法。我所知道的实现使用 vtable 来做到这一点,它通常作为第一个指针存储在对象空间中,因此指向 vtable 的指针将与此相同,因此: vtable = *this

  • 其他情况,取决于编译器和平台

注意:使用 this

的示例省略了类型转换

关于c++ - 意外输出而不是运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29139054/

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