C++ 指向空指针的对象(关于编译时绑定和运行时绑定)

来源:互联网 发布:珠光色眼影推荐知乎 编辑:程序博客网 时间:2024/06/06 02:01

今天对C++的编译时绑定和运行时绑定有了很大的理解,写在这里与大家共享。

先上代码:

#include<iostream>using namespace std;class B {public:    void foo() { cout << "B foo " << endl; }    void pp() { cout << "B pp" << endl; }};int main(){    B *somenull = nullptr;    somenull->foo();    somenull->pp();    return 0;}

这段代码能够运行通过,并且输出:

B foo

B pp


大家对C++ 的多态肯定很熟悉,利用虚函数来实现C++的运行时绑定,可是这段代码能够运行通过,让我反思很久,翻看C++ primer,才知道这是C++ 的编译时绑定的作用。

因为对于普通的成员函数,C++在编译时就会将成员函数进行解析,且将调用的版本定下来。因此,到了运行时,由于foo()里面并没有任何需要解引用somenull指针的代码(即解引用*this),因此程序正常运行。

PS:这个问题在今年阿里的电话面试被问到,当时就回答的不是很清楚,现在仔细弄清楚了。

0 0
原创粉丝点击