#include <iostream>
using namespace std;
class A
{
public:
void test() { cout << "test A" << endl; }
};
void test()
{
A *p = nullptr;
p->test();
}
int main()
{
test();
return 0;
}
在C++里面,对于非虚成员函数,C++这么语言它是静态绑定的,这是不同于Java和Python,它们是在程序运行的时候找到p的成员函数,也就是所谓的动态绑定(也叫晚绑定/迟绑定)
但是对于C++而言,为了保证程序的运行,C++设计者认为,认为凡是编译器编译的时候能解决的事情,就不能拖到运行时查到了.
所以说对C++编译器,首先查到p的类型,发现它有一个非虚的成员函数叫test,
p->test();这个调用是编译器干的,找到之后,然后再在这个代码段生成一个函数调用,叫做 A::test();由于test函数里面没有需要解引用,也就不会产生段错误,对我们成员函数会有正常的一个解析.
也就是说对成员函数的解析以及查找都是在编译的时候就已经完成了,这就是所谓的静态绑定(也叫早绑定)