在下面的代码片段中,虽然指针未初始化,但调用仍然成功
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
you do使用this
指针(访问成员变量),这就是该崩溃的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)