gpt4 book ai didi

c++ - 为什么我可以使用无效的类指针进行函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:56 25 4
gpt4 key购买 nike

在下面的代码片段中,虽然指针没有初始化,但调用仍然成功

temp *ptr;
ptr->func2();

是C++语言特性,还是VC++6编译器作弊?

class temp {
public:
temp():a(9){}
int& func1()
{
return a;
}
bool func2(int arg)
{
if(arg%2==0)
return true;
return false;
}
int a;
};

int main(int argc, char **argv)
{
temp *ptr;
int a;
cin>>a;
if(ptr->func2(a))
{
cout<<"Good poniner"<<endl;
}
ptr->func1(); // Does not crash here
int crashere=ptr->func1();// But does crash here
return 0;
}

最佳答案

C++ 编译器不会阻止您使用未初始化的指针,尽管结果未定义,但现实世界中的编译器生成忽略指针未初始化这一事实的代码是正常的。

这是 C++ 相对于其他一些语言既快速又(相对)危险的原因之一。

您对 func2 的调用成功的原因是它没有触及它的 this 指针。指针值从未使用过,因此不会引起问题。在 func1 中,您确实使用了 this 指针(访问成员变量),这就是它崩溃的原因。

关于c++ - 为什么我可以使用无效的类指针进行函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524312/

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