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
- C++ 指向空指针的对象(关于编译时绑定和运行时绑定)
- C++ 两个有趣的问题(静态动态绑定,和类指针指向空的实质)
- java之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- java学习之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- java学习之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- 关于VC运行时绑定
- 关于空指针(指针指向为NULL)和void类型的指针的理解
- C++调用空指针对象的成员函数——静态绑定与动态绑定
- 关于野指针和空指针,以及空指针指向的内存
- 关于指针和指向指针的指针(C,C++)
- 指向对象的指针【c++】
- 三十、多态性、动态类型 和 动态绑定(三)运行时 VS 编译时
- 派生类的指针绑定到基类的对象(编译通过,但结果不可预知)
- C语言:空指针与不指向任何对象的指针的区别
- Java运行时绑定
- 运行时绑定
- Flex 运行时绑定
- C++ 运行时绑定
- Android studio 升级,不用下载完整版,完美更新到2.0
- maven的scm插件介绍及使用示例
- 访问单个节点的删除
- Java中获取文件大小的正确方法
- sqlserver中的dbo当用and 1=0/user SQL注入时
- C++ 指向空指针的对象(关于编译时绑定和运行时绑定)
- 关于信号三种处理方式初步理解!
- linux命令界面入门级操作
- IOS UIPanGestureRecognizer 移动图片
- Java Object类方法
- iOS证书及签名配置正常,但打包程序在低版本设备安装不上问题解决方法
- 求两字符串的最大相同子串--JAVA实现
- 杨辉三角
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总