先看一段代码:
#include<iostream>
using namespace std;
class A
{
public:
void func(){
cout << "hello" << endl;
}
};
int main(){
A *p = nullptr;
p->func();
return 0;
}
一开始看到这个代码,感觉p指向的是nullptr,所以p->func()
肯定是要报错了啊。但是实际运行是没有问题的,可以输出hello
.
原因就是因为函数是属于类的,在编译的时候就确定了,就算是空指针也可以正常访问该方法。
如果将上面的函数func
改为虚函数,则会报错。因为虚函数是在运行时决定调用哪个函数的,不会在静态编译期间确定,是迟绑定的,所以空指针访问时会出错。